Guía rápida SQL Server 2000 División Empresas
Unidad 4: Introducción a Transact-SQL
Panorama general.
Transact-SQL es un lenguaje de definición, manipulación y control de datos.
El lenguaje de programación Transact-SQL
El American National Standards Institute (ANSI) y el Internacional Standards
Organization (ISO) definieron estándares para SQL. Utilizando Transact-SQL,
Microsoft SQL Server 2000 soporta el nivel de implementación de SQL-92, El
SQL estándar publicado por ANSI e ISO en 1992. Transact SQL también contiene
algunas extensiones que incrementan su funcionalidad.
Tipos de sentencias de Transact-SQL
Para escribir y ejecutar una sentencia de Transact- SQL, deberá utilizar:
• Sentencias del Lenguaje de Definición de Datos (DDL), que permiten
crear objetos en la base de datos.
• Sentencias del Lenguaje de Control de Datos (DCL), que permiten
determinar quien puede ver o modificar los datos.
• Sentencias del Lenguaje de Manipulación de Datos (DML), que permiten
consultar y modificar los datos.
Sentencias del Lenguaje de Definición de Datos
Permiten crear bases de datos, tablas y tipos de datos definidos por el usuario.
También puede utilizar las sentencias DDL para administrar los objetos de
bases de datos. Algunas sentencias DDL son:
• CREATE nombre_objeto
• ALTER nombre_objeto
• DROP nombre_objeto
Por defecto, solo los miembros de sysadmin, dbcreator, db_owner, o
db_ddladmin pueden ejecutar sentencias DDL.
Ejemplo
USE Northwind
CREATE TABLE custumer
(cust_id int, company varchar(40), contact varchar(30), phone char(12))
GO
Unidad 4 -1- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Sentencias del Lenguaje de Control de Datos
Son utilizadas para cambiar los permisos asociados con un usuario de bases de
datos. La siguiente tabla describe las sentencias DCL
Sentencia Descripción
GRANT Crea una entrada en el sistema de seguridad que permite a un
usuario de la base de datos actual trabajar con datos de la base
de datos actual o ejecutar instrucciones Transact-SQL
específicas.
DENY Crea una entrada en el sistema de seguridad que deniega un
permiso de una cuenta de seguridad en la base de datos actual
e impide que la cuenta de seguridad herede los permisos a
través de los miembros de su grupo o función.
REVOKE Quita un permiso otorgado o denegado previamente de un
usuario de la base de datos actual.
Ejemplo
USE Northwind
GRANT SELECT ON products TO public
GO
Sentencias del Lenguaje de Manipulación de Datos
Estas sentencias trabajan con los datos en la base de datos. Puede cambiar
datos o recuperar información. Las sentencias DML incluyen:
• SELECT
• INSERT
• UPDATE
• DELETE
Ejemplo
USE Northwind
SELECT categoryid, productname, productid, unitprice
FROM products
GO
Unidad 4 -2- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Sintaxis de los elementos de Transact-SQL
Las sentencias DML son construidas utilizando un número de elemento de
sintaxis. Estos incluyen:
Directivas de Batch
Un Batch es una colección de una o más instrucciones SQL que el cliente envía
en una unidad. Hay dos métodos básicos para controlar procesos por lotes:
GO
Las herramientas de SQL Server interpretan GO como una señal de que deben
enviar el lote actual de instrucciones Transact-SQL a SQL Server. Una
instrucción Transact-SQL no puede ocupar la misma línea que un comando GO,
GO no es una instrucción de Transact-SQL.
EXEC
Ejecuta una función definida por el usuario y devuelve valores escalares, un
procedimiento del sistema, un procedimiento almacenado definido por el
usuario o un procedimiento almacenado extendido. Admite también la
ejecución de una cadena de caracteres en un proceso por lotes Transact-SQL.
Comentarios
Los comentarios son cadenas de texto incluidas en el código de un programa
que no se ejecutan. Pueden ser utilizados de dos formas, en línea con la
sentencia o como un bloque.
Comentarios en línea
Puede crear comentarios en línea utilizando dos guiones (--).
Ejemplo
USE northwind
SELECT productname
, (unitsinstock – unitsonorder) -- Calcula el inventario
, supplierid
FROM products
GO
Unidad 4 -3- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Comentarios en bloque
Puede crear un bloque de comentarios colocando el carácter (/*) al inicio del
bloque y finalizar el comentario con el carácter (*/).
Ejemplo
/*
Este código recupera todas las líneas de la tabla productos y muestra el precio
unitario, el precio unitario se incrementado un 10%, y el nombre del producto.
*/
USE northwind
SELECT unitprice, (unitprice * 1.1), productname
FROM products
GO
Identificadores
SQL Server proporciona una serie de reglas para nombrar identificadores
normales de objetos y un método de utilizar delimitadores para identificadores
que no son normales.
Identificadores normales
Reglas de los identificadores normales:
• El primer carácter debe ser alguno de los siguientes:
o Una letra, de la "a" a la "z" y de la "A" a la "Z.
o El signo de subrayado (_), arroba (@) o número (#).
Un identificador que empieza con el signo arroba indica un
parámetro o una variable local. Un identificador que empieza con
un signo número indica una tabla o procedimiento temporal. Un
identificador que empieza con un signo de número doble (##)
indica un objeto temporal global.
• Los caracteres subsiguientes pueden ser:
o Letras
o Números
o El signo de arroba, dólar ($), número o subrayado.
• El identificador no debe ser una palabra reservada de Transact-SQL. SQL
Server reserva las versiones en mayúsculas y minúsculas de las palabras
reservadas.
• No se permiten los caracteres especiales o los espacios incrustados.
Unidad 4 -4- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Identificadores delimitados
Si un identificador cumple todas las reglas de formato de los identificadores, se
puede utilizar con o sin delimitadores. Si un identificador no cumple las reglas
de formato de los identificadores normales, debe aparecer siempre delimitado.
Los identificadores delimitados se utilizan en estas situaciones:
• Cuando los nombres contienen espacios
• Cuando las palabras reservadas se usan para los nombres de objeto o
partes de los nombres de objeto.
• Los identificadores entre corchetes aparecen delimitados por corchetes
([ ]):
SELECT * FROM [Blanks In Table Name]
• Los identificadores entrecomillados aparecen delimitados por comillas
dobles ("):
SELECT * FROM "Blanks in Table Name"
Los identificadores entre comillas dobles sólo son válidos si la opción
SET QUOTED_IDENTIFIER es ON.
Sugerencias para nombrar identificadores
• Utilice nombres cortos
• Utilice nombres que tengan un significado
• Utilice las convenciones para nombrar identificadores
• Use Un identificador que distinga el tipo de objeto
o Vistas
o Procedimientos almacenados
• Utilice nombres de objetos y nombres de usuarios únicos
o Tabla Ventas y rol Ventas
Tipos de datos
Los tipos de datos son los tipos de valores que se pueden almacenar en una
base de datos.
Números
Este tipo de datos representa valores numéricos e incluye enteros como int,
tinyint, smallint y bigint. También incluyen valores con precisión decimal
como es numeric, decimal, money, smallmoney. Estos incluyen valores con
punto flotante como son float y real.
Unidad 4 -5- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Fechas
Este tipo de datos representa fechas y horas. Los dos tipos de fechas son
datetime, que tiene una precisión de 3. 33 milisegundos, y smalldatetime,
que tiene una precisión de intervalos de un minuto.
Caracteres
Este tipo de datos es utilizado para representar datos de tipo carácter o cadena
e incluye tipos de datos de tamaño fijo como son char y nchar, así como tipos
de datos de longitud variable como son varchar y nvarchar.
Binario
Este tipo de datos es muy similar al tipo carácter en términos de
almacenamiento y estructura, excepto que el contenido de los datos son una
serie de bytes. El tipo de dato binario incluye binary y varbinary. Un dato de
tipo bit indica un valor simple de cero o uno.
Identificadores únicos
Este tipo especial de datos es un uniqueidentifier que representa un
identificador global único (GUID), el cual es un valor hexadecimal de 16-bytes.
SQL Variant
Este tipo de dato puede representar valores de varios tipos soportados por SQL
Server, con excepción de text, ntext, image, timestamp y rowversion.
Imagen y texto
Estos tipos de datos son estructuras de objetos largos binarios (BLOB) que
representan tipos de datos de longitud fija y variable para almacenar
caracteres no-Unicode y Unicode y datos binarios, como es image, text y ntext.
Tablas
El tipo de dato tabla puede ser utilizado sólo para definir varios locales de tipo
tabla o retornar valores de una función definida por el usuario.
Tipos de datos definido por el usuario
Este tipo de dato es creado por el administrador de base de datos y está
basado en tipos de datos del sistema. Utilice tipos de datos definidos por el
usuario cuando algunas tablas deban almacenar el mismo tipo de datos en una
columna y quiera asegurarse que las columnas tienen exactamente el mismo
tipo de datos, longitud.
Unidad 4 -6- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Variables
Las variables son elementos del lenguaje con valores asignados. Puede utilizar
variables locales en Transact-SQL.
Una variable local es definida por el usuario utilizando la sentencia DECLARE,
asignando en un valor inicial en un SET o SELECT, y entonces utilizarla con la
sentencia o procedimiento por lotes en el cual fue declarada. El ámbito de una
variable local abarca el procedimiento en el cual fue definida. Para una
variable local se utiliza un símbolo @antes del nombre.
Sintaxis
DECLARE {@ variable_local tipo_dato} [...n]
SET @nombre_variable_local = expresión
Ejemplo
Use northwind
DECLARE @EmpID varchar(11), @vlName char(20)
SET @vlname = ‘Dodsworth’
SELECT @EmpID = employeeid FROM employees
WHERE LastName = @vlname
SELECT @EmpID AS EmployeeID
GO
Resultado
EmployeeID
9
(1 row(s) affected)
Unidad 4 -7- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Funciones del sistema
Puede utilizar funciones, incluyendo funciones de sistema, en cualquier parte
que una expresión lo permita en una consulta. Transact-SQL proporciona
algunas funciones que retornan información.
Aquí hay tres tipos de funciones con las que debería estar familiarizado:
Funciones de agregado
Operan sobre una colección de valores y devuelven un solo valor de resumen.
Ejemplo
USE northwind
SELECT AVG(unitprice) AS AvgPrice
FROM products
GO
Resultado
AvgPrice
28.8663
(1 row(s) affected)
Funciones escalares
Operan sobre un valor y después devuelven otro valor. Las funciones escalares
se pueden utilizar donde la expresión sea válida. Esta tabla clasifica las
funciones escalares.
Categoría de la Explicación
función
Funciones de Devuelven información acerca de la configuración
configuración actual.
Funciones de cursor Devuelven información acerca de los cursores.
Funciones de fecha Realizan una operación sobre un valor de entrada de
y hora fecha u hora, y devuelven un valor de cadena, numérico
o de fecha y hora.
Funciones Realizan un cálculo sobre valores de entrada
matemáticas proporcionados como parámetros de la función y
devuelven un valor numérico.
Funciones de Devuelven información acerca de la base de datos y los
metadatos objetos de la base de datos.
Funciones de Devuelven información acerca de usuarios y funciones.
seguridad
Unidad 4 -8- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Funciones de Realizan una operación sobre un valor de entrada de
cadena cadena (char o varchar) y devuelven un valor de cadena
o numérico.
Funciones del Realizan operaciones y devuelven información acerca
sistema de valores, objetos y configuraciones de Microsoft®
SQL Server™.
Funciones de Devuelven información estadística acerca del sistema.
estadísticas del
sistema
Funciones de texto e Realizan una operación sobre un valor o una columna de
imagen texto o imagen, y devuelven información acerca del
valor.
Ejemplo
USE northwind
SELECT DB_NAME() AS ‘database’
GO
Resultado
Database
Northwind
(1 row(s) affected)
Ejemplos de funciones de sistema
Las funciones del sistema son comúnmente utilizadas cuando convierte datos de
tipo fecha de un formato de un país a otro.
Ejemplo 1
Este ejemplo demuestra como puede convertir fechas a diferentes estilos.
SELECT ‘ANSI:’, CONVERT (varchar(30), GETDATE(), 102) AS Style UNION
SELECT ‘japanese:’, CONVERT (varchar(30), GETDATE(), 111) UNION
SELECT ‘European:’, CONVERT (varchar(30), GETDATE(), 113)
GO
Resultado Estilo
European: 20 Nov 1998 16:44:12:857
Japanese: 11/20/98
ANSI: 1998.11.20
Unidad 4 -9- www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Ejemplo 2
Este ejemplo utiliza la opción DATEFORMAT de la sentencia SET para formatear
fechas. Esta configuración es utilizada solo en la interpretación de caracteres
tipo cadena que son convertidos a tipo fecha. No tiene efectos en el despliegue
de los valores.
SET DATEFORMAT dmy
GO
DECLARE @vdate datetime
SET @vdate = ‘29/11/98’
SELECT @vdate
GO
Resultado
1998-11-29 00:00:00.000
(1 row(s) affected)
Ejemplo 3
Este ejemplo retorna el nombre de usuario actual y la aplicación que el usuario
está utilizando. El usuario en este ejemplo es un miembro de sysadmin.
USE library
SELECT user_name(), app_name()
GO
Resultado
Dbo MS SQL Query Analyzer
Ejemplo 4
Este ejemplo determina si la columna firstname en la tabla member de la base
de datos library permite valores nulos.
Un resultado de cero (falso) significa que los valores nulos no son permitidos, y
un resultado de uno (verdadero) significa que los valores nulos son permitidos.
Note que la función OBJECT_ID es incrustada en la función COLUMNPROPERTY.
Esto le permite obtener el objeto id de la tabla member.
USE library
SELECT COLUMNPROPERTY(OBJECT_ID(‘member’), ‘firstname’, ‘allowsNull’)
GO
Resultado
0
(1 row(s) affected)
Unidad 4 - 10 - www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Operadores
Los operadores son símbolos que realizan cálculos matemáticos,
concatenaciones de cadena, comparaciones entre columnas, constantes y
variables.
Pueden ser combinados y utilizados en condiciones de búsqueda. Cuando se
combinan, el orden en el cual son procesados se basa en la prioridad
establecida.
Tipos de operadores
SQL Server soporta cuatro tipos de operadores:
Aritméticos
Los operadores aritméticos realizan cálculos con columnas numéricas o
constantes. Transact-SQL soporta multiplicación (*), división (/), módulo (%),
suma (+) y resta (-).
Comparación
Los operadores de relación comparan dos expresiones. Las comparaciones
pueden ser entre variables, columnas y expresiones del mismo tipo. Los
operadores de comparación se incluyen en la siguiente tabla.
Operadores Significado
= Igual a
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
<> No igual que
Concatenación de cadenas
El operador de concatenación de cadenas (+) concatena valores de cadena.
Lógicos
Los operadores lógicos AND, OR y NOT permiten unir condiciones en la
cláusula WHERE.
Unidad 4 - 11 - www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Niveles de prioridad de los operadores
Si utiliza múltiples operadores (lógicos o aritméticos) para combinar
expresiones, SQL Server procesa los operadores en el orden de su prioridad, lo
cual puede afectar el valor del resultado. Los operadores tienen la siguiente
prioridad de (de más alto más bajo).
Tipo Operador Símbolo
Agrupar Agrupación primaria ()
Aritmético Multiplicativos */%
Aritmético Aditivos -+
Otros Concatenación +
Lógico NOT NOT
Lógico AND AND
Lógico OR OR
Expresiones
Las expresiones son una combinación de símbolos y operadores que se evalúan
para generar un simple valor. Pueden ser simples cómo es una constante,
variable, columna o valor escalar o expresiones complejas creadas por la
conexión de una o más expresiones simples con operadores.
Ejemplo
El siguiente ejemplo calcula el monto total de un producto en una orden,
multiplica el precio unitario por la cantidad ordenada, y entonces se filtran los
resultados para aquellos que el monto total es mayor de $10,000.00.
USE northwind
SELECT orderID, ProductID
,(UnitPrice * Quantity) as ExtendedAmount
FROM [Order Details]
WHERE (UnitPrice * Quantity) > 1000
GO
Resultado
OrderID ProductID ExtendedAmount
10353 38 10540.0000
10417 38 10540.0000
10424 38 10329.2000
10865 38 15810.0000
10889 38 10540.0000
10981 38 15810.0000
(6 row(s) affected)
Unidad 4 - 12 - www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Elementos del lenguaje de control de flujo
Transact-SQL contiene algunos elementos del lenguaje que controlan el flujo
lógico. También contiene la función CASE que permite utilizar condiciones
lógicas en una fila simple con una sentencia SELECT o UPDATE.
Nivel de sentencia
Los siguientes elementos le permiten controlar el flujo lógico con un script:
BEGIN ... END Blocks Estos elementos encierran una serie de sentencias.
IF ... ELSE Blocks Estos elementos especifican que SQL Server deberá
ejecutar la primera alternativa si la condición es verdadera. De lo contrario,
SQL deberá ejecutar la segunda alternativa.
WHILE Constructs Estos elementos ejecutar una sentencia repetidamente
mientras la condición especificada es verdadera. Las sentencias BREAK y
CONTINUE controlan la operación de las sentencias dentro del ciclo WHILE.
Ejemplo 1
Éste ejemplo determina si un cliente tiene alguna orden antes de borrar el
cliente de la lista.
USE northwind
IF EXISTS (SELECT * FROM orders
WHERE customerid = ‘frank’)
PRINT ‘*** El cliente no puede ser borrado ***’
ELSE
BEGIN
DELETE customers WHERE customerid = ‘frank’
PRINT ‘*** Cliente eliminado***’
END
GO
Nivel de fila
Una función CASE evalúa una lista de condiciones y devuelve como resultado
una de las distintas expresiones posibles.
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
Unidad 4 - 13 - www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Ejemplo 2
El siguiente ejemplo declara una variable local, evalúa para ver si es igual a 4,
5, o 6, y si lo es, un contador a través de un ciclo WHILE determina si el valor
actual es un número par o impar.
DECLARE @n tinyint
SET @n = 5
IF (@n BETWEEN 4 and 6)
BEGIN
WHILE (@n > 0)
BEGIN
SELECT @n AS ‘Numero’
,CASE
WHEN (@N % 2) = 1
THEN ‘IMPAR’
ELSE ‘PAR’
END AS ‘Type’
SET @n = @n – 1
END
END
ELSE
PRINT ‘NO ANALIZADO’
GO
Resultado
Numero Tipo
5 IMPAR
(1 row(s) affected)
Numero Tipo
4 PAR
(1 row(s) affected)
Numero Tipo
3 IMPAR
(1 row(s) affected)
Numero Tipo
2 PAR
(1 row(s) affected)
Numero Tipo
1 IMPAR
(1 row(s) affected)
Unidad 4 - 14 - www.icam.com.mx
Guía rápida SQL Server 2000 División Empresas
Palabras clave reservadas.
SQL Server reserva ciertas palabras clave para su uso exclusivo.
• Nombres de identificadores que tienen significado especial
o Palabras claves de Transact-SQL
o Palabras claves de ANSI SQL-92
o Palabras claves de ODBC
• No utilice palabras claves reservadas para nombres de identificadores
Unidad 4 - 15 - www.icam.com.mx