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 84 85 86 87 88 89 90 91 92 93 94 95
| DECLARE @TABLE_SCHEMA sysname = N'S_PRS',
@TABLE_NAME sysname = N'T_PERSONNE_PHYSIQUE_PSP';
SELECT N'USE [' + DB_NAME() + N'];' AS SQL_CMD
UNION ALL
SELECT N'GO'
UNION ALL
SELECT CASE uses_ansi_nulls WHEN 1 THEN N'SET ANSI_NULLS ON;' ELSE N'SET ANSI_NULLS OFF;' END
FROM sys.tables
WHERE name = @TABLE_NAME
AND schema_id = SCHEMA_ID(@TABLE_SCHEMA)
UNION ALL
SELECT N'GO'
UNION ALL
SELECT CASE is_quoted_identifier_on WHEN 1 THEN N'SET QUOTED_IDENTIFIER ON;' ELSE N'SET QUOTED_IDENTIFIER OFF;' END
FROM sys.databases
WHERE name = DB_NAME()
UNION ALL
SELECT N'GO'
UNION ALL
SELECT N'CREATE TABLE [' + COALESCE(@TABLE_SCHEMA, SCHEMA_NAME()) + N'].[' + @TABLE_NAME + N'] (' AS SQL_CMD_LINE
UNION ALL
SELECT N'[' + clmns.name + '] '
+ COALESCE(N'[' + s1clmns.name + '].[' + usrt.name + N'] ', N'[' + baset.name + N'] ', N'') +
CASE WHEN s1clmns.name IS NULL
THEN
CASE WHEN ISC.DATA_TYPE LIKE '%char' AND clmns.max_length > 0
THEN N'(' + CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(32)) + N') '
WHEN ISC.DATA_TYPE LIKE '%varchar' OR ISC.DATA_TYPE = 'varbinary' AND CHARACTER_MAXIMUM_LENGTH = -1
THEN N'(max) '
WHEN ISC.DATA_TYPE IN ('datetime2', 'time', 'datetimeoffset')
THEN N'(' + CAST(DATETIME_PRECISION AS NVARCHAR(32)) + N') '
WHEN ISC.DATA_TYPE IN ('decimal', 'numeric')
THEN N'(' + CAST(NUMERIC_SCALE AS VARCHAR(32)) + N',' + CAST(NUMERIC_PRECISION AS VARCHAR(32)) + N') '
WHEN ISC.DATA_TYPE = 'xml' AND xscclmns.name IS NOT NULL
THEN N'([' + s2clmns.name + N'].[' + xscclmns.name + ']) '
ELSE N''
END
ELSE N''
END
+ CASE clmns.is_computed WHEN 1 THEN cc.definition + N' ' ELSE N'' END
+ CASE cc.is_persisted WHEN 1 THEN N'PERSISTED ' ELSE N'' END
+ CASE WHEN clmns.collation_name <> CAST((DATABASEPROPERTYEX(DB_NAME(), 'Collation')) AS NVARCHAR(128)) THEN N'COLLATE ' + clmns.collation_name ELSE N'' END
+ CASE clmns.is_nullable WHEN 1 THEN N'NULL ' ELSE N' NOT NULL ' END
+ CASE clmns.is_identity WHEN 1 THEN N'IDENTITY(' + CAST(CAST(ic.seed_value AS bigint) AS NVARCHAR(32)) + N', '
+ CAST(CAST(ic.increment_value AS bigint) AS NVARCHAR(32)) + N') ' ELSE N'' END
+ CASE WHEN clmns.is_rowguidcol = 1 THEN N'ROWGUIDCOL ' ELSE N'' END
+ CASE WHEN ic.is_not_for_replication = 1 THEN N'NOT FOR REPLICATION ' ELSE N'' END
FROM sys.tables AS tbl
INNER JOIN sys.schemas AS s
ON tbl.schema_id = s.schema_id
INNER JOIN sys.all_columns AS clmns
ON clmns.object_id=tbl.object_id
LEFT OUTER JOIN INFORMATION_SCHEMA.COLUMNS AS ISC
ON clmns.name = ISC.COLUMN_NAME AND TABLE_SCHEMA = @TABLE_SCHEMA AND TABLE_NAME = @TABLE_NAME
LEFT OUTER JOIN sys.computed_columns AS cc
ON cc.object_id = clmns.object_id and cc.column_id = clmns.column_id
LEFT OUTER JOIN sys.types AS usrt
ON usrt.user_type_id = clmns.user_type_id
LEFT OUTER JOIN sys.schemas AS s1clmns
ON s1clmns.schema_id = usrt.schema_id
LEFT OUTER JOIN sys.objects AS d
ON d.object_id = clmns.default_object_id
LEFT OUTER JOIN sys.default_constraints as dc
ON clmns.default_object_id = dc.object_id
LEFT OUTER JOIN sys.identity_columns AS ic
ON ic.object_id = clmns.object_id and ic.column_id = clmns.column_id
LEFT OUTER JOIN sys.types AS baset
ON (baset.user_type_id = clmns.system_type_id and baset.user_type_id = baset.system_type_id) or
((baset.system_type_id = clmns.system_type_id) and (baset.user_type_id = clmns.user_type_id) and (baset.is_user_defined = 0) and (baset.is_assembly_type = 1))
LEFT OUTER JOIN sys.objects AS r
ON r.object_id = clmns.rule_object_id
LEFT OUTER JOIN sys.xml_schema_collections AS xscclmns
ON xscclmns.xml_collection_id = clmns.xml_collection_id
LEFT OUTER JOIN sys.schemas
AS s2clmns ON s2clmns.schema_id = xscclmns.schema_id
WHERE tbl.name=@TABLE_NAME and s.name = @TABLE_SCHEMA
UNION ALL
SELECT N') ON ' + N'[' + ds.name + '] '
+ CASE WHEN ds.type = 'PS' THEN N'(' + cp.name + N') ' ELSE '' END
+ CASE WHEN lob_data_space_id > 0 THEN N'[' + dsl.name + N']' ELSE N'' END
FROM sys.tables AS t
JOIN sys.indexes AS i ON i.object_id = t.object_id
JOIN sys.schemas AS s ON t.schema_id = s.schema_id
JOIN sys.data_spaces AS ds
ON i.data_space_id = ds.data_space_id
LEFT OUTER JOIN sys.data_spaces AS dsl
ON t.lob_data_space_id = dsl.data_space_id
LEFT OUTER JOIN sys.index_columns AS ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id AND ic.partition_ordinal > 0
LEFT OUTER JOIN sys.columns AS cp
ON ic.object_id = cp.object_id AND ic.column_id = cp.column_id
WHERE s.name = @TABLE_SCHEMA AND t.name = @TABLE_NAME
AND i.index_id < 2; |
Partager