DECLARE @TablesToBeTruncated AS TABLE
(Id INT IDENTITY(1,1),TableObjectId INT, TableName SYSNAME,
SchemaId INT)
INSERT INTO @TablesToBeTruncated
SELECT ST.object_id,ST.name,ST.schema_id
FROM sys.Tables ST
WHERE ST.type = 'U' AND ST.NAME NOT LIKE '#%'
AND ST.name <> 'sysdiagrams'
DECLARE @CreateScript AS NVARCHAR(MAX), @DropScript AS NVARCHAR(MAX)
SELECT
@DropScript = ISNULL(@DropScript,'') + 'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(Tlist.SchemaId)) + '.'
+ QUOTENAME(OBJECT_NAME(FKey.parent_object_id)) + ' DROP CONSTRAINT ' + QUOTENAME(FKey.name)
+ CHAR(10),
@CreateScript = ISNULL(@CreateScript,'') + 'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(Tlist.SchemaId)) + '.'
+ QUOTENAME(OBJECT_NAME(FKey.parent_object_id)) + ' ADD CONSTRAINT ' + QUOTENAME(FKey.name)
+ ' FOREIGN KEY ' + '(' + STUFF((
SELECT ',' + QUOTENAME(COL_NAME(FKeyCol.parent_object_id, FKeyCol.parent_column_id))
FROM SYS.FOREIGN_KEY_COLUMNS FKeyCol
WHERE FKey.OBJECT_ID = FKeyCol.constraint_object_id
ORDER BY FKeyCol.constraint_column_id
FOR XML PATH('')),1,1,'') + ')'
+ ' REFERENCES ' + QUOTENAME(SCHEMA_NAME(Tlist.SchemaId)) + '.'
+ QUOTENAME(OBJECT_NAME(FKey.referenced_object_id)) + ' (' + STUFF((
SELECT ',' + QUOTENAME(COL_NAME(FKeyCol.referenced_object_id, FKeyCol.referenced_column_id))
FROM SYS.FOREIGN_KEY_COLUMNS FKeyCol
WHERE FKey.OBJECT_ID = FKeyCol.constraint_object_id
ORDER BY FKeyCol.constraint_column_id
FOR XML PATH('')),1,1,'') + ') '
+ CASE WHEN update_referential_action_desc = 'CASCADE' THEN ' ON UPDATE CASCADE'
WHEN update_referential_action_desc = 'SET_DEFAULT' THEN ' ON UPDATE SET DEFAULT'
WHEN update_referential_action_desc = 'SET_NULL' THEN ' ON UPDATE SET NULL'
ELSE ''
END
+ CASE WHEN delete_referential_action_desc = 'CASCADE' THEN ' ON DELETE CASCADE'
WHEN delete_referential_action_desc = 'SET_DEFAULT' THEN ' ON DELETE SET DEFAULT'
WHEN delete_referential_action_desc = 'SET_NULL' THEN ' ON DELETE SET NULL'
ELSE ''
END + CHAR(10)
FROM @TablesToBeTruncated Tlist
INNER JOIN SYS.FOREIGN_KEYS FKey
ON Tlist.TableObjectId = FKey.referenced_object_id
IF LEN(ISNULL(@DropScript,'')) > 0
BEGIN
PRINT CHAR(10) + ' GO ' + CHAR(10) + '--------DROP FOREIGN KEY CONSTRAINTS SCRIPT--------'
PRINT @DropScript + CHAR(10) + ' GO ' + CHAR(10)
END
PRINT '--------TRUNCATE TABLES SCRIPT--------'
DECLARE @id INT,@truncatescript NVARCHAR(MAX)
SELECT @id = MIN(Id)FROM @TablesToBeTruncated
WHILE @id is not null
BEGIN
SELECT @truncatescript = 'TRUNCATE TABLE ' + QUOTENAME(SCHEMA_NAME(SchemaId)) + '.' + QUOTENAME(TableName)
FROM @TablesToBeTruncated WHERE Id = @id
PRINT @truncatescript
SELECT @id = MIN(Id)FROM @TablesToBeTruncated WHERE Id > @id
END
IF LEN(ISNULL(@CreateScript,'')) > 0
BEGIN
PRINT CHAR(10) + ' GO ' + CHAR(10) + '--------CREATE BACK THE FOREIGN KEY CONSTRAINTS SCRIPT--------'
PRINT CAST((@CreateScript + CHAR(10) + ' GO ' + CHAR(10)) AS NTEXT)
END
GO
Comments
Post a Comment