Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL Server 2000 Manual Exelente
SQL Server 2000 Manual Exelente
Apuntes
Borja Sotomayor
30 de junio de 2002
c 2002 Borja Sotomayor
1. Introducción 1
3. Vistas 19
3.1. Como crear una vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2. Definición de la Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3. Propiedades de la Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4. Seguridad 25
4.1. Arquitectura de Seguridad en SQL Server . . . . . . . . . . . . . . . . . . 25
4.2. Inicios de Sesión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3. Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4. Permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3
TEMA 1
Introducción
Estos apuntes son una introducción a SQL Server 2000, el sistema de gestión de bases
de datos de Microsoft. Se presupone que el lector tiene conocimientos de bases de datos
relacionales, por lo que los apuntes se centran en explicar el manejo del SQL Server, no
en explicar conceptos de bases de datos (por ejemplo, no se explica lo que es una relación
de 1 a N, sólo se explica como crearla en SQL Server).
El objetivo de estos apuntes es servir como material de apoyo a un cursillo de SQL
Server y como material de referencia, por lo que no se recomienda intentar ‘empezar
desde cero’ a manejar SQL Server utilizando exclusivamente estos apuntes.
Para todas las imágenes explicativas se ha utilizado una sencilla base de datos de
ejemplo que representa una tienda de informática. El diagrama relacional de esta base
de datos se muestra en la figura 1.1.
Estos apuntes se han preparado utilizando un SQL Server 2000 Standard Edition
ejecutándose sobre un Windows 2000 Server. Si el lector está utilizando otra versión de
SQL Server 2000 (Desktop Edition o Enterprise Edition), es posible que algunas opciones
y propiedades mencionadas en estos apuntes no aparezcan en su versión, o aparezcan
deshabilitadas.
Finalmente, todo comentario, opinión, sugerencia o crı́tica (constructiva y/o destruc-
tiva) será bienvenida en la dirección borja@borjanet.com
' $
ARTICULOS
FABRICANTES
PK Codigo int identity
PK Codigo int identity
Nombre nvarchar(100)
Nombre nvarchar(100) Precio int
FK1 Fabricante int
1
TEMA 2
General: El único dato que se puede introducir en esta pestaña es el nombre de la base
de datos. Este dato es obligatorio.
Archivo de Datos: En esta pestaña podemos especificar cuales son los ficheros donde
se almacenará la base de datos, ası́ como su ubicación. Los valores por defecto que
da SQL Server son válidos en la mayorı́a de los casos. Únicamente cabe destacar
que, por defecto, los archivos se sitúan en el directorio donde está instalado SQL
Server. Una vez creado el fichero de datos de la base de datos, su ubicación no
puede ser modificada. Por lo tanto, si se desea situar el fichero en otro directorio,
es necesario hacerlo en este momento.
Registro de Transacciones: En esta pestaña podemos especificar cuales son los ficheros
donde se almacenará el registro de transacciones, ası́ como su ubicación. El registro
de transacciones se utiliza para realizar recuperaciones de la base de datos. Al igual
que los ‘Archivos de Datos’, los valores por defecto que proporciona SQL Server
son válidos en la mayorı́a de los casos.
Una vez creada la base de datos, aparecerá en la carpeta Bases de Datos. Si hacemos
click sobre el icono que aparece al lado de la nueva base de datos, veremos que ésta
contiene varios elementos (ver figura 2.3):
Diagramas: Nos permite elaborar las relaciones entre tablas gráficamente, utilizando un
diagrama relacional. Se verá en la sección 2.6.
3
2. Creación de Bases de Datos
' $
' $
' $
Tablas: Nos permite ver las tablas de nuestra base de datos. La creación de tablas se
verá en la sección 2.2.
Vistas: Nos permite ver las vistas definidas en nuestra base de datos. Las vistas se
explican en el tema 3.
Usuarios: Nos permite ver los usuarios definidos en nuestra base de datos, ası́ como
cambiar sus permisos. Se ven en el tema 4.
Funciones: Nos permite ver las funciones (similares a los procedimientos almacenados)
definidas en nuestra base de datos. Estos apuntes no cubren este tema.
Reglas: Similares a (aunque menos potentes que) las restricciones CHECK que se verán
en la sección 2.7. La reglas se mantienen en SQL Server por compatibilidad con
versiones anteriores.
Valores Predeterminados: Permite establecer los valores por defecto de una tabla. Este
elemento se mantiene por compatibilidad con versiones anteriores (en la práctica,
lo habitual es establecer los valores por defecto al crear la tabla).
Tipos de datos definidos por el usuario: SQL Server permite que el usuario defina sus
propios tipos de datos a partir de los tipos de datos fundamentales (por ejem-
' $
plo, definir un tipo de datos llamado Teléfono que sea una cadena de caracteres
numéricos con longitud 9). Estos apuntes no cubren este tema.
Definición de Columnas
Para definir las columnas de la nueva tabla utilizaremos el panel superior, que inicial-
mente está vacı́o. Por cada columna de la tabla deberemos rellenar una fila en el panel
' $
' $
Nombre de columna: Puede estar formado por letras, números, el signo de subrayado
( ), la arroba (@) o la almohadilla (#), pero debe empezar por una letra (también
está permitido que empiece por ciertos sı́mbolos, pero su uso está recomendado
para casos muy concretos).
Tipo de datos: Consultar el apéndice A para ver una lista de todos los tipos de datos
permitidos en SQL Server.
Permitir valores nulos: Indica si esta columna puede tener el valor especial NULL.
En la figura 2.6 se muestra el aspecto del panel superior tras introducir cuatro colum-
nas.
Propiedades de Columna
Por cada columna definida se pueden modificar una serie de propiedades que aparecen
en el panel inferior (ver figura 2.7). No todas las propiedades pueden modificarse, ya que
algunas dependen del tipo de datos de la columna.
Precisión y Escala: Solamente se puede cambiar esta propiedad para los tipos de datos
decimal y numeric. En ambos tipos de datos, la precisión hace referencia al número
máximo de dı́gitos que puede tener un valor de la columna. La escala hace referencia
al número máximo de dı́gitos que pueden aparecen a la derecha de la coma decimal.
' $
Identidad: Indica que la columna es autonumérica. Es decir, SQL Server asigna automáti-
camente un valor a esta columna cada vez que se produce una inserción. Esta
propiedad sólo está disponible para tipos de datos numéricos enteros (p.ej. int).
EsRowGuid: Indica que esta columna identifica a la fila en un contexto global (no local,
como hace una clave primaria). Únicamente puede aplicarse a columnas de tipo
uniqueidentifier, y no puede haber más de una columna en una tabla que sea
ROWGUID.
Fórmula: En caso de que la columna sea una columna calculada, aquı́ debe introducirse
su formula. Las columnas calculadas son propias de Analysis Services, una parte
de SQL Server que no se trata en estos apuntes.
' $
' $
Guardar la Tabla
Una vez definida por completo la tabla, será necesario guardarla. Para ello basta con
hacer click sobre el botón Guardar de la barra de botones (ver figura 2.9). En este
momento se pedirá el nombre de la tabla.
' $
' $
' $
SQL Server crea automáticamente un nombre para la relación, que está compuesto
por los nombres de las dos tablas.
SQL Server supone que la tabla que estamos modificando va a ser el ‘lado N’ (lo
que SQL Server llama Tabla de claves externas).
La tabla del ‘lado 1’ (Tabla de claves principales) será inicialmente la primera tabla
(en orden alfabético) de nuestra base de datos.
Partiendo de esta situación, para configurar por completo la relación deberemos seguir
los siguientes pasos:
' $
Exigir relación para duplicación: Mantiene la relación al hacer copias de las tablas
a otras bases de datos.
Exigir relación para INSERT y UPDATE: Se verifica que el resultado de una in-
serción, actualización o eliminación no rompe la integridad referencial.
Actualizar en cascada los campos relacionados: Activa la actualización en cas-
cada.
Eliminar en cascada los campos relacionados: Activa la eliminación en cascada.
' $
' $
' $
' $
Figura 2.17.: Botones para crear ı́ndices y para crear restricciones CHECK.
& %
Índices
La ventana de creación de ı́ndices (ver figura 2.18) tiene las siguientes opciones:
Nombre del ı́ndice: SQL Server suministra un nombre predeterminado. Este nombre
puede modificarse.
Nombre de columna / Ordenar: Columnas que forman parte del ı́ndice, y el orden en
el que aparecen en el ı́ndice.
' $
Crear con UNIQUE: Nos permite indicar que el ı́ndice debe ser único. Es decir, que
no se pueden dar valores repetidos en el ı́ndice. Podemos optar entre la opción
Restricción (simplemente se comprueba que no hay valores repetidos, pero sin
crear un ı́ndice) o la opción Índice (sı́ crea un ı́ndice). En este último caso, si
seleccionamos la opción Pasar por alto clave duplicada la inserción de un valor
repetido en el ı́ndice no produce un error, sino que sencillamente se ignora.
Factor de relleno: Indica la cantidad de espacio que puede ocuparse en cada página
del ı́ndice (el espacio libre se reserva para acomodar el crecimiento del ı́ndice). Se
recomienda no modificar el valor por defecto salvo en casos muy concretos.
Crear con CLUSTERED: Cuando un ı́ndice se crea con CLUSTERED, el orden fı́sico
(en el disco) de los datos de la tabla coincide con el orden lógico del ı́ndice. Esto
optimiza ciertos tipos de consultas. Solo puede haber un ı́ndice CLUSTERED por
cada tabla.
' $
Restricciones CHECK
La ventana de creación de restricciones CHECK (ver figura 2.19) tiene las siguientes
opciones:
Comprobar datos existentes al crear: Si la restricción se crea sobre una tabla que ya
tiene datos, se comprueba que los datos cumplen la restricción.
Exigir restricción para INSERT y UPDATE: Se verifica que el resultado de una inser-
ción, actualización o eliminación cumple la restricción.
Vistas
19
3. Vistas
' $
' $
' $
' $
' $
Ejecutar de la barra de botones (ver figura 3.5) podremos ver el resultado de la consulta
en el panel inferior.
Para guardar la vista debemos pulsar el botón Guardar (esquina superior izquierda
de la barra de botones, con icono de disquete). Antes de guardar la vista se nos pedirá el
nombre con el que queremos guardar la vista (ver figura 3.6).
' $
' $
' $
Seguridad
Tal y como muestra la figura 4.1, podrı́a decirse que la polı́tica de seguridad pone una
serie de ‘barreras’ entre el usuario y la base de datos. SQL Server nos permite establecer
una polı́tica de seguridad siguiendo estos tres pasos.
Por cada usuario que vaya a acceder a nuestro sistema de base de datos deberemos
crear un inicio de sesión
' $
25
4. Seguridad
Por cada base de datos a la que tenga que acceder cierto usuario, deberemos crearle
a su inicio de sesión una cuenta de usuario en dicha base de datos.
Una vez que el usuario tiene una cuenta en la base de datos, le daremos unos
permisos concretos en cada tabla, en los procedimientos almacenados, etc.
Inicios de Sesión de SQL Server: Son válidos únicamente dentro de SQL Server. Para
crearlo hay que suministrar un identificador de inicio de sesión y la contraseña que
tendrá dicho inicio de sesión.
Inicios de Sesión de Windows NT: En vez de crear un inicio de sesión dentro de SQL
Server, se utiliza una cuenta de usuario (o grupo de usuarios) ya existente de
Windows NT 4.0 o de Windows 2000. Para crearlo basta con indicar qué usuario o
grupo de usuarios podrá acceder al SQL Server. Esta modalidad es especialmente
útil cuando ya se ha creado una polı́tica de seguridad en Windows NT o Windows
2000 (por lo que no será necesario volver a crearla en SQL Server) o cuando se va
a acceder al SQL Server desde un ASP (ver apéndice B).
SQL Server: En el campo Nombre debemos indicar el nombre del nuevo inicio de sesión.
En el campo Contraseña indicaremos su contraseña.
' $
' $
' $
Para crear las cuentas de usuario, simplemente tenemos que seleccionar las bases de
datos a las que tendrá acceso el inicio de sesión. Inicialmente, el nombre de la cuenta de
usuario es el mismo que el nombre del inicio de sesión. Este nombre puede cambiarse,
aunque no es habitual hacerlo. Finalmente, en cada base de datos seleccionada, podemos
asignarle a la cuenta de usuario unas funciones de base de datos, que aparecen resumidas
en la tabla 4.2.
Para finalizar la creación del inicio de sesión basta con pulsar el botón Aceptar.
4.3 Usuarios
Aunque es aconsejable crear las cuentas de usuario al mismo tiempo que los inicios de
sesión, también pueden crearse por separado. Para ello hay que seguir los siguientes
pasos:
' $
Nombre de usuario (no tiene por qué ser el mismo que el inicio de sesión).
Funciones de base de datos a las que pertenece el usuario. Ver tabla 4.2.
4.4 Permisos
Una vez creados los inicios de sesión y las cuentas de usuario, hay que dar permisos a
los usuarios. Al dar ‘permisos’ especificaremos para cada usuario que operaciones puede
realizar sobre cada objeto de la base de datos. Por ejemplo, los permisos podrı́an consistir
en lo siguiente:
El usuario X puede ejecutar sentencias SELECT, INSERT y UPDATE sobre las tablas
A y B, pero no puede realizar sentencias DELETE.
El usuario Y puede ejecutar sentencias SELECT sobre la tabla C, pero solo sobre
sus campos Ca, Cb y Cc.
fila podremos modificar los permisos que tiene el usuario seleccionado en esa tabla. Los
permisos que podremos modificar son:
Al hacer click en los check boxes se alternará entre tres posibles estados:
Permiso por defecto: (check box en blanco) Se aplica el permiso por defecto que viene
determinado por las funciones del servidor y de la base de datos.
Permiso concedido: (check box con una marca de chequeo verde) Se concede el permiso
para realizar la operación en la tabla.
Permiso denegado: (check box con una X roja) No se permite realizar la operación en
la tabla.
Además, es posible establecer permisos a nivel de columna en las tablas. Para ello de-
bemos situarnos en la fila correspondiente a la tabla cuyos permisos queremos modificar
y pulsar el botón Columnas. . . . Esto nos muestra la ventana de permisos de columnas
(ver figura 4.6), donde podremos indicar por cada campo (columna) de la tabla si se
pueden realizar consultas SELECT o UPDATE sobre dicho campo. El significado de los
check boxes es el mismo que en la ventana anterior.
' $
binary Datos binarios de longitud fija con una longitud máxima de 8.000 bytes.
char Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000
caracteres.
float Números con precisión de coma flotante comprendidos entre -1,79E + 308 y 1,79E
+ 308.
image Datos binarios de longitud variable con una longitud máxima de 231 −1 (2.147.483.647)
bytes.
int Datos enteros (números enteros) comprendidos entre −231 (-2.147.483.648) y 231 −1
(2.147.483.647).
nchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres.
ntext Datos Unicode de longitud variable con una longitud máxima de 230 −1 (1.073.741.823)
caracteres.
33
A. Tipos de Datos de SQL Server
nvarchar Datos Unicode de longitud variable con una longitud máxima de 4.000 ca-
racteres. sysname es el tipo de datos suministrado por el sistema y definido por el
usuario que es funcionalmente equivalente a nvarchar(128) y que se utiliza para
hacer referencia a nombres de objetos de bases de datos.
real Números con precisión de coma flotante comprendidos entre -3,40E + 38 y 3,40E
+ 38.
sql variant Un tipo de datos que almacena valores de varios tipos de datos aceptados
en SQL Server, excepto text, ntext, timestamp y sql variant.
text Datos no Unicode de longitud variable con una longitud máxima de 231 − 1
(2.147.483.647) caracteres.
timestamp Un número único para toda la base de datos que se actualiza cada vez que
se actualiza una fila.
varbinary Datos binarios de longitud variable con una longitud máxima de 8.000 bytes.
Para acceder desde un ASP a una base de datos SQL Server no es necesario utilizar de
manera distinta los objetos ADODB (Connection, Command, Recordset, etc.). Simple-
mente hay que utilizar un ConnectionString especifico para el SQL Server.
Utilizando ODBC
Si queremos conectarnos utilizando un driver ODBC, el ConnectionString tendrá el
siguiente formato:
usuario es el nombre del inicio de sesión con el que nos vamos a conectar al servidor.
DSN=nombre DSN
35
B. Conexión a SQL Server desde un ASP
Utilizando OLE DB
Para acceder desde un ASP a un SQL Server es preferible hacerlo a través de OLE
DB, en lugar de ODBC, ya que es mucho más rápido y eficiente. En este caso, el
ConnectionString tendrá el siguiente formato:
usuario es el nombre del inicio de sesión con el que nos vamos a conectar al servidor.