Professional Documents
Culture Documents
El SQL
El SQL
su verdadero jugo. En este artículo te mostramos 10 snippets de SQL que puedes poner
en práctica en tus propios proyectos sin riesgo alguno. Los hay de todo tipo, desde uno
para listar aquellas queries más lentas y pesadas, hasta otro que muestra las
dependencias entre tablas.
GO
Crear un log DDL de la base de datos
Creamos primero el log:
GO
use ddl_changelog;
eventtype nvarchar(100),
objectname nvarchar(100),
objecttype nvarchar(100),
databasename nvarchar(100),
schemaname nvarchar(100),
SystemUser nvarchar(255),
AppName nvarchar(255),
HostName nvarchar(255),
tsql nvarchar(MAX),
createddate datetime,
(DDLChangeLogID ASC))
FOR DDL_DATABASE_LEVEL_EVENTS
AS
VALUES (
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)') ,
getdate()) ;
GO
GO
SET NOCOUNT ON
END
GO
@TableName SYSNAME,
@IncludeConstraints BIT = 1,
@IncludeIndexes BIT = 1,
@UseSystemDataTypes BIT = 0
)
AS
BEGIN
FieldValue VARCHAR(200)
DatabaseName VARCHAR(100),
TableOwner VARCHAR(100),
TableName VARCHAR(100),
FieldName VARCHAR(100),
ColumnPosition INT,
ColumnDefaultValue VARCHAR(100),
ColumnDefaultName VARCHAR(100),
IsNullable BIT,
DataType VARCHAR(100),
MaxLength INT,
NumericPrecision INT,
NumericScale INT,
DomainName VARCHAR(100),
FieldListingName VARCHAR(110),
FieldDefinition CHAR(1),
IdentityColumn BIT,
IdentitySeed INT,
IdentityIncrement INT,
IsCharColumn BIT
Flds VARCHAR(4000),
ObjectID INT
ObjectID INT
Flds VARCHAR(4000),
DatabaseName,
TableOwner,
TableName,
FieldName,
ColumnPosition,
ColumnDefaultValue,
ColumnDefaultName,
IsNullable,
DataType,
MaxLength,
NumericPrecision,
NumericScale,
DomainName,
FieldListingName,
FieldDefinition,
IdentityColumn,
IdentitySeed,
IdentityIncrement,
IsCharColumn
SELECT
DB_NAME(),
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
CAST(ORDINAL_POSITION AS INT),
COLUMN_DEFAULT,
dobj.name AS ColumnDefaultName,
DATA_TYPE,
CAST(CHARACTER_MAXIMUM_LENGTH AS INT),
CAST(NUMERIC_PRECISION AS INT),
CAST(NUMERIC_SCALE AS INT),
DOMAIN_NAME,
COLUMN_NAME + ',',
'' AS FieldDefinition,
FROM
INFORMATION_SCHEMA.COLUMNS c
ORDER BY
c.TABLE_NAME, c.ORDINAL_POSITION
FROM @ShowFields
INSERT INTO @HoldingArea (Flds) VALUES('(')
VALUES('CREATE TABLE ' + CASE WHEN @NewTableName IS NOT NULL THEN @NewTableNa
me ELSE @DBName + '.' + @TableSchema + '.' + @TableName END)
VALUES('(')
SELECT
CASE
ELSE UPPER(DataType) +
CASE WHEN IsNullable = 1 THEN ' NULL ' ELSE ' NOT NULL ' END +
END +
CASE WHEN FieldID = (SELECT MAX(FieldID) FROM @ShowFields) THEN '' ELSE ',' E
ND
FROM @ShowFields
IF @IncludeConstraints = 1
BEGIN
SELECT
',CONSTRAINT [' + name + '] FOREIGN KEY (' + ParentColumns + ') REFERENCES ['
+ ReferencedObject + '](' + ReferencedColumns + ')'
FROM
SELECT
REVERSE(SUBSTRING(REVERSE((
FROM
sys.foreign_key_columns fkc
REVERSE(SUBSTRING(REVERSE((
FROM
sys.foreign_key_columns fkc
FROM sys.foreign_keys fk
) a
SELECT ',CONSTRAINT [' + name + '] CHECK ' + definition FROM sys.check_constr
aints
SELECT DISTINCT
PKObject = cco.object_id
FROM
sys.key_constraints cco
WHERE
i.type = 1 AND
is_primary_key = 1
SELECT DISTINCT
PKObject = cco.object_id
FROM
sys.key_constraints cco
WHERE
i.type = 2 AND
is_primary_key = 0 AND
is_unique_constraint = 1
SELECT ',CONSTRAINT ' + name + CASE type WHEN 'PK' THEN ' PRIMARY KEY ' + CAS
E WHEN pk.ObjectID IS NULL THEN ' NONCLUSTERED ' ELSE ' CLUSTERED ' END
WHEN 'UQ' THEN ' UNIQUE ' END + CASE WHEN u.ObjectID IS NOT NULL THEN ' NONCL
USTERED ' ELSE '' END + '(' +
REVERSE(SUBSTRING(REVERSE((
SELECT
c.name + + CASE WHEN cc.is_descending_key = 1 THEN ' DESC' ELSE ' ASC' END +
','
FROM
sys.key_constraints ccok
WHERE
ccok.object_id = cco.object_id
FROM
sys.key_constraints cco
WHERE
OBJECT_NAME(cco.parent_object_id) = @TableName
END
VALUES(')')
IF @IncludeIndexes = 1
BEGIN
INSERT INTO @Definition(FieldValue)
SELECT
REVERSE(SUBSTRING(REVERSE((
SELECT name + CASE WHEN sc.is_descending_key = 1 THEN ' DESC' ELSE ' ASC' END
+ ','
FROM
sys.index_columns sc
WHERE
sc.index_id = i.index_id
FROM sys.indexes i
WHERE
OBJECT_NAME(object_id) = @TableName
AND CASE WHEN @ClusteredPK = 1 AND is_primary_key = 1 AND type = 1 THEN 0 ELS
E 1 END = 1
AND is_unique_constraint = 0
AND is_primary_key = 0
END