1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| -------------------------------------------------------------------
-- 28/01/2009 - ElSuket
-- Imprime le script de la structure et des contraintes d'une table
-- utilisation : EXEC dbo.uspScripteTable 'maTable'
-------------------------------------------------------------------
CREATE PROCEDURE uspScripteTable
@nomTable SYSNAME
AS
BEGIN
DECLARE @script VARCHAR(2048)
SELECT @script = ISNULL(@script, '') + CHAR(9) +
COLONNES.name +
CASE
WHEN COMPCOL.object_id IS NOT NULL THEN ''
ELSE ' ' + UPPER(TYPES.name)
END + '' +
CASE COLONNES.is_identity
WHEN 0 THEN ''
WHEN 1 THEN ' IDENTITY(' + CAST(IDENT_SEED(TABLES.name) AS VARCHAR) + ', ' + CAST(IDENT_INCR(TABLES.name) AS VARCHAR) + ')'
END +
CASE COLONNES.is_nullable
WHEN 0 THEN ' NOT NULL'
WHEN 1 THEN ' NULL'
END +
CASE
WHEN FK_COLONNES.constraint_object_id IS NULL THEN ''
ELSE ' CONSTRAINT FK_' + TABLES.name + '_' + COLONNES.name + ' FOREIGN KEY (' + COLONNES.name + ') REFERENCES ' + TAB_FK.name --OBJECT_NAME(FK_COLONNES.parent_object_id)
END +
CASE
WHEN DF.object_id IS NULL THEN ''
ELSE ' CONSTRAINT DF_' + TABLES.name + '_' + COLONNES.name + ' DEFAULT ' + REPLACE(REPLACE(DF.definition, '(', ''), ')', '')
END +
CASE
WHEN CHK.object_id IS NULL THEN ''
ELSE ' CONSTRAINT CHK_' + TABLES.name + '_' + COLONNES.name + ' CHECK (' + REPLACE(REPLACE(REPLACE(REPLACE(CHK.definition, '(', ''), ')', ''), '[', ''), ']', '') + ')'
END +
CASE
WHEN COMPCOL.object_id IS NULL THEN ''
ELSE ' AS (' + REPLACE(REPLACE(REPLACE(REPLACE(COMPCOL.definition, '(', ''), ')', ''), '[', ''), ']', '') + ')'
END +
CASE
WHEN ISNULL(INDEXES.is_primary_key, 0) = 0 THEN ''
ELSE ' CONSTRAINT PK_' + TABLES.name + ' PRIMARY KEY'
END +
CASE
WHEN ISNULL(INDEXES.is_unique_constraint, 0) = 0 THEN ''
ELSE ' CONSTRAINT UQ_' + TABLES.name + '_' + COLONNES.name + ' UNIQUE'
END + ',' + CHAR(10)
FROM sys.tables TABLES -- Tables
JOIN sys.columns COLONNES ON TABLES.object_id = COLONNES.object_id -- Colonnes
JOIN sys.types TYPES ON COLONNES.user_type_id = TYPES.user_type_id -- types
LEFT JOIN sys.index_columns COL_INDEX -- indexes
ON COL_INDEX.object_id = COLONNES.object_id
AND COL_INDEX.column_id = COLONNES.column_id
LEFT JOIN sys.indexes INDEXES
ON INDEXES.object_id = COL_INDEX.object_id
AND INDEXES.index_id = COL_INDEX.index_id
LEFT JOIN sys.default_constraints DF -- contraintes de valeur par défaut
ON DF.parent_object_id = TABLES.object_id
AND DF.parent_column_id = COLONNES.column_id
LEFT JOIN sys.check_constraints CHK -- contraintes CHECK
ON CHK.parent_object_id = TABLES.object_id
AND CHK.parent_column_id = COLONNES.column_id
LEFT JOIN sys.computed_columns COMPCOL -- colonnes calculées
ON COMPCOL.column_id = COLONNES.column_id
AND COMPCOL.object_id = TABLES.object_id
LEFT JOIN sys.foreign_key_columns FK_COLONNES
ON FK_COLONNES.parent_object_id = TABLES.object_id
AND FK_COLONNES.parent_column_id = COLONNES.column_id
LEFT JOIN sys.columns COL_FK
ON FK_COLONNES.referenced_object_id = COL_FK.object_id
AND FK_COLONNES.referenced_column_id = COL_FK.column_id
LEFT JOIN sys.tables TAB_FK ON COL_FK.object_id = TAB_FK.object_id
WHERE TABLES.name = @nomTable
SELECT @script = 'CREATE TABLE ' + @nomTable + CHAR(10) +
'(' + CHAR(10) +
SUBSTRING(@script, 1, LEN(@script) - 2) + CHAR(10) +
')' + CHAR(10)
PRINT @script
END |
Partager