Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Es el lenguaje SQL que emplea SQL Server 2000, cuando se ejecuta una instrucción
SQL simple se está empleando Transact, se puede forzar a que utilice el estándar SQL-
92, que realmente es lo mismo pero con menor funcionalidad.
USE 3
GO 3
PRINT 4
EXECUTE - EXEC 4
IDENTIFICADORES TRANSACT- 5
SQL
DECLARE @local_variable 5
TRIGGERS 6
CREATE FUNCTION 7
CREATE PROCEDURE 8
LIKE 9
JOIN 10
SET NOCOUNT 11
SET NOEXEC 11
SELECT 11
DELETE 13
INSERT 13
CREATE STATISTICS 14
CREATE RULE 14
CREATE VIEW 15
CREATE TABLE 15
UPDATE 16
@@FETCH_STATUS 16
@@ERROR 17
@@ROWCOUNT 18
TRANSACCIONES 19
---------------------------------------------------------------------------------------------------------
USE
Sintaxis
USE {baseDatos}
GO
Sintaxis
GO
Ejemplo:
USE pubs
GO
DECLARE @NmbrAuthors int
SELECT @NmbrAuthors = COUNT(*)
FROM authors
PRINT 'The number of authors as of ' +
CAST(GETDATE() AS char(20)) + ' is ' +
CAST(@NmbrAuthors AS char (10))
GO
Observaciones
Para imprimir un mensaje de error definido por el usuario cuando se tiene el número de
error que se puede obtener con @@ERROR, utilice RAISERROR en lugar de PRINT.
Ejemplos
EXECUTE - EXEC
Ejecuta una función definida por el usuario y que 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.
Para llamar a una función, utilice la sintaxis que se describe para EXECUTE
stored_procedure.
F. Utilizar EXECUTE con una variable de procedimiento almacenado
IDENTIFICADORES TRANSACT-SQL
@ = variable global
# = objeto temporal local
## = objeto temporal global
DECLARE @local_variable
A. Utilizar DECLARE
Este ejemplo utiliza una variable local denominada @find para recuperar información
de todos los autores cuyos apellidos comienzan con Ring.
USE pubs
DECLARE @find varchar(30)
SET @find = 'Ring%'
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE @find
(2 row(s) affected)
Este ejemplo recupera nombres de empleados de los empleados de Binnet & Hardley
(pub_id = 0877) contratados el 1 de enero de 1993 o posteriormente.
USE pubs
SET NOCOUNT ON
GO
DECLARE @pub_id char(4), @hire_date datetime
SET @pub_id = '0877'
SET @hire_date = '1/01/93'
-- Here is the SELECT statement syntax to assign values to two local
-- variables.
-- SELECT @pub_id = '0877', @hire_date = '1/01/93'
SET NOCOUNT OFF
SELECT fname, lname
FROM employee
WHERE pub_id = @pub_id and hire_date >= @hire_date
fname lname
-------------------- ------------------------------
Anabela Domingues
Paul Henriot
(2 row(s) affected)
TRIGGERS
A. Utilizar un desencadenador con un mensaje de aviso
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER reminder
GO
Si tiene que probar actualizaciones que afectan a otras columnas que no sean las 8
primeras de una tabla, debe utilizar la función SUBSTRING para probar si
COLUMNS_UPDATED devuelve el bit correcto. Este ejemplo prueba las
actualizaciones que afectan a las columnas 3, 5 o 9 de la tabla
Northwind.dbo.Customers.
USE Northwind
DROP TRIGGER tr1
GO
CREATE TRIGGER tr1 ON Customers
FOR UPDATE AS
IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(3-1))
+ power(2,(5-1)))
AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(1-1)))
)
PRINT 'Columns 3, 5 and 9 updated'
GO
UPDATE Customers
SET ContactName=ContactName,
Address=Address,
Country=Country
GO
CREATE FUNCTION
A. Función de valores escalares definida por el usuario que calcula la semana ISO
En este ejemplo, una función definida por el usuario, ISOweek, toma un argumento de
fecha y calcula el número de semana ISO. Para que esta función realice el cálculo
correctamente, se debe llamar a SET DATEFIRST 1 antes de llamar a la función.
SET DATEFIRST 1
SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'
ISO Week
----------------
52
CREATE PROCEDURE
Este procedimiento almacenado devuelve todos los autores (nombre y apellidos), los
títulos y los publicadores a partir de una combinación de cuatro tablas. Este
procedimiento almacenado no utiliza ningún parámetro.
USE pubs
EXECUTE au_info_all
-- Or
EXEC au_info_all
au_info_all
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'au_info' AND type = 'P')
DROP PROCEDURE au_info
GO
USE pubs
GO
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO
-- Or
EXEC au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXEC au_info @firstname = 'Ann', @lastname = 'Dull'
Ver Tambien
* DROP PROCEDURE
* ALTER PROCEDURE
LIKE
Símbolo Significado
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d o f
LIKE '[-acdf]' -, a, c, d o f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d y abc_de
LIKE 'abc[def]' abcd, abce y abcf
JOIN
USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC
USE pubs
SELECT au_fname, au_lname, pub_name
FROM authors CROSS JOIN publishers
ORDER BY au_lname DESC
SET NOCOUNT
Hace que deje de devolverse como parte de los resultados el mensaje que indica el
número de filas afectado por una instrucción Transact-SQL.
Sintaxis
SET NOEXEC
Sintaxis
SELECT
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Se puede utilizar el operador UNION entre consultas para combinar sus resultados en
un solo conjunto de resultados.
Sintaxis
Cláusula COMPUTE
Genera totales que aparecen como columnas de resumen adicionales al final del
conjunto de resultados.
XML
CUBE
Especifica que, además de las filas que normalmente proporciona GROUP BY, deben
incluirse filas de resumen en el conjunto de resultados. Se devuelve una fila de resumen
GROUP BY por cada posible combinación de grupo y subgrupo del conjunto de
resultados.
ROLLUP
Especifica que, además de las filas que normalmente proporciona GROUP BY, deben
incluirse filas de resumen en el conjunto de resultados. Los grupos se resumen en un
orden jerárquico, desde el nivel inferior del grupo al superior. La jerarquía del grupo se
determina mediante el orden en que se especifican las columnas de agrupamiento.
DELETE
Ejemplos
USE pubs
DELETE authors
Debido a que au_lname puede no ser único, este ejemplo elimina todas las filas en que
au_lname es McBadden.
USE pubs
DELETE FROM authors
WHERE au_lname = 'McBadden'
USE pubs
DELETE FROM authors
WHERE CURRENT OF complex_join_cursor
INSERT
CREATE STATISTICS
Este ejemplo crea el grupo de estadísticas (colección) names, que calcula estadísticas de
todas las columnas CompanyName y ContactName de la tabla Customers, y
deshabilita la capacidad de volver a calcular automáticamente las estadísticas.
CREATE RULE
Crea un objeto denominado regla. Cuando se enlaza una regla a una columna o un tipo
de datos definido por el usuario, la regla especifica los valores aceptables que se pueden
insertar en esa columna. Una columna puede tener una regla y una o más restricciones
CHECK asociadas a ella. Cuando esto es así, se evalúan todas las restricciones.
A. Regla con un intervalo - restringe el intervalo de enteros
CREATE VIEW
Crea una tabla virtual que representa los datos de una o más tablas de una forma
alternativa. CREATE VIEW debe ser la primera instrucción en una secuencia de
consultas.
USE pubs
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'categories')
VER TAMBIEN
• DROP VIEW
• ALTER VIEW
CREATE TABLE
CREATE TABLE T1
( column_1 int identity,
column_2 varchar(30)
CONSTRAINT default_name DEFAULT ('column default'),
column_3 int NULL,
column_4 varchar(40)
)
INSERT INTO T1 (column_4)
VALUES ('Explicit value')
INSERT INTO T1 (column_2,column_4)
VALUES ('Explicit value', 'Explicit value')
INSERT INTO T1 (column_2,column_3,column_4)
VALUES ('Explicit value',-44,'Explicit value')
SELECT *
FROM T1
UPDATE
UPDATE Northwind.dbo.Products
SET UnitPrice = UnitPrice * 1.1
WHERE CategoryID = 2
USE Northwind
GO
DECLARE abc CURSOR FOR
SELECT CompanyName
FROM Shippers
OPEN abc
GO
CLOSE abc
DEALLOCATE abc
GO
@@FETCH_STATUS
Sintaxis
@@FETCH_STATUS
@@ERROR
Sintaxis
@@ERROR
Tipos devueltos
integer
USE pubs
GO
UPDATE authors SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"
IF @@ERROR = 547
print "A check constraint violation occurred"
USE pubs
GO
DECLARE @del_error int, @ins_error int
-- Start a transaction.
BEGIN TRAN
IF @ins_error <> 0
ROLLBACK TRAN
END
GO
@@ROWCOUNT
Sintaxis
@@ROWCOUNT
Tipos devueltos
integer
TRANSACCIONES
Ejemplos
En este ejemplo se modifica el reparto de derechos de autor entre los dos autores de The
Gourmet Microwave. Debido a que el estado de la base de datos sería incoherente entre
dos actualizaciones, éstas se deben agrupar en una transacción definida por el usuario.
/*
After having updated the royaltyper entries for the two authors, the
user inserts the savepoint percentchanged, and then determines how a
10-percent increase in the book's price would affect the authors'
royalty earnings.
*/
UPDATE titles
SET price = price * 1.1
WHERE title = 'The Gourmet Microwave'
SELECT (price * royalty * ytd_sales) * royaltyper
FROM titles, titleauthor
WHERE title = 'The Gourmet Microwave'
AND titles.title_id = titleauthor.title_id
/*
The transaction is rolled back to the savepoint
with the ROLLBACK TRANSACTION statement.
*/
/* End of royaltychange. */
DECLARE CURSOR
STATIC
Define un cursor que hace una copia temporal de los datos que utiliza. Todas las
peticiones al cursor se responden desde esta tabla temporal de tempdb; por ello, las
modificaciones realizadas en las tablas base no se reflejarán en los datos obtenidos en
las recuperaciones realizadas en el cursor y además este cursor no admite
modificaciones.
Observaciones
El conjunto de resultados generado al abrir este cursor contiene todas las filas y todas
las columnas de la tabla authors de la base de datos pubs. Este cursor se puede
actualizar, y todas las actualizaciones y eliminaciones se representan en las
recuperaciones realizadas contra el cursor. FETCH NEXT es la única recuperación
disponible debido a que no se ha especificado la opción SCROLL.
Este ejemplo muestra cómo se pueden anidar los cursores para elaborar informes
complejos. El cursor interno se declara para cada autor.
SET NOCOUNT ON
OPEN authors_cursor
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT " "
SELECT @message = "----- Books by Author: " +
@au_fname + " " + @au_lname
PRINT @message
OPEN titles_cursor
FETCH NEXT FROM titles_cursor INTO @title
IF @@FETCH_STATUS <> 0
PRINT " <<No Books>>"
WHILE @@FETCH_STATUS = 0
BEGIN
END
CLOSE titles_cursor
DEALLOCATE titles_cursor
CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
BACKUP
WHILE
WHILE Boolean_expression
{sql_statement | statement_block}
[BREAK]
{sql_statement | statement_block}
[CONTINUE]
A. Utilizar BREAK y CONTINUE con IF...ELSE y WHILE anidados
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear'
CASE
Evalúa una lista de condiciones y devuelve como resultado una de las distintas
expresiones posibles.
USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
B. Utilizar una instrucción SELECT con una función CASE sencilla y otra de búsqueda
USE pubs
GO
SELECT 'Price Category' =
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
ELSE 'Expensive book!'
END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO
GOTO
Altera el flujo de ejecución y lo dirige a una etiqueta. Las instrucciones GOTO y las
etiquetas se pueden utilizar en cualquier punto de un procedimiento, lote o bloque de
instrucciones. Las instrucciones GOTO se pueden anidar.
Definición de la etiqueta:
label :
Alteración de la ejecución:
GOTO label
USE pubs
GO
DECLARE @tablename sysname
SET @tablename = N'authors'
tableLoop:
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @tablename = RTRIM(UPPER(@tablename))
EXEC ("SELECT """ + @tablename + """ = COUNT(*) FROM "
+ @tablename )
PRINT " "
END
FETCH NEXT FROM tnames_cursor INTO @tablename
IF (@@FETCH_STATUS <> -1) GOTO tableLoop
GO
WAITFOR
Sintaxis
BEGIN
WAITFOR TIME '22:20'
EXECUTE update_all_stats
END
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.
Sintaxis
Permisos de la instrucción:
GRANT
{ ALL [ PRIVILEGES ] | permission [ ,...n ] }
{
[ ( column [ ,...n ] ) ] ON { table | view }
| ON { table | view } [ ( column [ ,...n ] ) ]
| ON { stored_procedure | extended_procedure }
| ON { user_defined_function }
}
TO security_account [ ,...n ]
[ WITH GRANT OPTION ]
[ AS { group | role } ]
statement
• CREATE DATABASE
• CREATE DEFAULT
• CREATE FUNCTION
• CREATE PROCEDURE
• CREATE RULE
• CREATE TABLE
• CREATE VIEW
• BACKUP DATABASE
• BACKUP LOG
A. Conceder permisos sobre instrucciones
USE pubs
GO
GRANT SELECT
ON authors
TO funcion_public
GO
/* User Jean */
GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION
/* User Jill */
GRANT SELECT ON Plan_Data TO Jack AS Accounting
VER TAMBIEN
• DENY
• REVOKE
bit
Decimal y numeric
decimal Datos de precisión y escala numérica fijas comprendidos entre -1038 +1 y 1038
– 1.
money y smallmoney
Números con precisión de coma flotante comprendidos entre -1,79E + 308 y 1,79E
float
+ 308.
real Números con precisión de coma flotante comprendidos entre -3,40E + 38 y 3,40E
+ 38.
datetime y smalldatetime
Cadenas de caracteres
char Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000
caracteres.
nchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres.
nvarchar Datos Unicode de longitud variable con una longitud máxima de 4.000
caracteres. 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.
ntext Datos Unicode de longitud variable con una longitud máxima de 230 - 1
(1.073.741.823) caracteres.
Cadenas binarias
binary Datos binarios de longitud fija con una longitud máxima de 8.000 bytes.
varbinary Datos binarios de longitud variable con una longitud máxima de 8.000 bytes.
image Datos binarios de longitud variable con una longitud máxima de 231 - 1
(2.147.483.647) bytes.
tableUn tipo de datos especial que se utiliza para almacenar un conjunto de resultados
para un proceso posterior.
timestamp Un número único para toda la base de datos que se actualiza cada vez que se
actualiza una fila.
CAST y CONVERT
Sintaxis
Uso de CAST:
Uso de CONVERT:
---
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
Este ejemplo concatena expresiones que no son de texto ni tipo binary mediante la
función de conversión de tipos de datos CAST.
USE pubs
GO
SELECT 'The price is ' + CAST(price AS varchar(12))
FROM titles
WHERE price > 10.00
GO
Nota Como los datos Unicode siempre utilizan un número par de bytes, preste atención
al convertir binary o varbinary en tipos de datos aceptados en Unicode, y viceversa.
Por ejemplo, esta conversión no devuelve el valor hexadecimal 41, sino 4100: SELECT
CAST(CAST(0x41 AS nvarchar) AS varbinary)
COALESCE
Sintaxis