Advertisement
citstudio

SQL SERVER TRUNCATE ALL TABLES

Nov 21st, 2014
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.15 KB | None | 0 0
  1. /* TRUNCATE ALL TABLES IN A DATABASE */
  2. DECLARE @dropAndCreateConstraintsTable TABLE
  3.         (
  4.          DropStmt VARCHAR(MAX)
  5.         ,CreateStmt VARCHAR(MAX)
  6.         )
  7. /* Gather information to drop and then recreate the current foreign key constraints  */
  8. INSERT  @dropAndCreateConstraintsTable
  9.         SELECT  DropStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema
  10.                 + '].[' + ForeignKeys.ForeignTableName + '] DROP CONSTRAINT ['
  11.                 + ForeignKeys.ForeignKeyName + ']; '
  12.                ,CreateStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema
  13.                 + '].[' + ForeignKeys.ForeignTableName
  14.                 + '] WITH CHECK ADD CONSTRAINT [' + ForeignKeys.ForeignKeyName
  15.                 + '] FOREIGN KEY([' + ForeignKeys.ForeignTableColumn
  16.                 + ']) REFERENCES [' + SCHEMA_NAME(sys.objects.schema_id)
  17.                 + '].[' + sys.objects.[name] + ']([' + sys.COLUMNS.[name]
  18.                 + ']); '
  19.         FROM    sys.objects
  20.         INNER JOIN sys.COLUMNS
  21.                 ON ( sys.COLUMNS.[object_id] = sys.objects.[object_id] )
  22.         INNER JOIN ( SELECT sys.foreign_keys.[name] AS ForeignKeyName
  23.                            ,SCHEMA_NAME(sys.objects.schema_id) AS ForeignTableSchema
  24.                            ,sys.objects.[name] AS ForeignTableName
  25.                            ,sys.COLUMNS.[name] AS ForeignTableColumn
  26.                            ,sys.foreign_keys.referenced_object_id AS referenced_object_id
  27.                            ,sys.foreign_key_columns.referenced_column_id AS referenced_column_id
  28.                      FROM   sys.foreign_keys
  29.                      INNER JOIN sys.foreign_key_columns
  30.                             ON ( sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.[object_id] )
  31.                      INNER JOIN sys.objects
  32.                             ON ( sys.objects.[object_id] = sys.foreign_keys.parent_object_id )
  33.                      INNER JOIN sys.COLUMNS
  34.                             ON ( sys.COLUMNS.[object_id] = sys.objects.[object_id] )
  35.                                AND ( sys.COLUMNS.column_id = sys.foreign_key_columns.parent_column_id )
  36.                    ) ForeignKeys
  37.                 ON ( ForeignKeys.referenced_object_id = sys.objects.[object_id] )
  38.                    AND ( ForeignKeys.referenced_column_id = sys.COLUMNS.column_id )
  39.         WHERE   ( sys.objects.[TYPE] = 'U' )
  40.                 AND ( sys.objects.[name] NOT IN ( 'sysdiagrams' ) )
  41. /* SELECT * FROM @dropAndCreateConstraintsTable AS DACCT  --Test statement*/
  42. DECLARE @DropStatement NVARCHAR(MAX)
  43. DECLARE @RecreateStatement NVARCHAR(MAX)
  44. /* Drop Constraints */
  45. DECLARE Cur1 CURSOR READ_ONLY
  46. FOR
  47.         SELECT  DropStmt
  48.         FROM    @dropAndCreateConstraintsTable
  49. OPEN Cur1
  50. FETCH NEXT FROM Cur1 INTO @DropStatement
  51. WHILE @@FETCH_STATUS = 0
  52.       BEGIN
  53.             PRINT 'Executing ' + @DropStatement
  54.             EXECUTE sp_executesql @DropStatement
  55.             FETCH NEXT FROM Cur1 INTO @DropStatement
  56.       END
  57. CLOSE Cur1
  58. DEALLOCATE Cur1
  59. /* Truncate all tables in the database in the dbo schema */
  60. DECLARE @DeleteTableStatement NVARCHAR(MAX)
  61. DECLARE Cur2 CURSOR READ_ONLY
  62. FOR
  63.         SELECT  'TRUNCATE TABLE [dbo].[' + TABLE_NAME + ']'
  64.         FROM    INFORMATION_SCHEMA.TABLES
  65.         WHERE   TABLE_SCHEMA = 'dbo'
  66.                 AND TABLE_TYPE = 'BASE TABLE'
  67.   /* Change your schema appropriately if you don't want to use dbo */
  68. OPEN Cur2
  69. FETCH NEXT FROM Cur2 INTO @DeleteTableStatement
  70. WHILE @@FETCH_STATUS = 0
  71.       BEGIN
  72.             PRINT 'Executing ' + @DeleteTableStatement
  73.             EXECUTE sp_executesql @DeleteTableStatement
  74.             FETCH NEXT FROM Cur2 INTO @DeleteTableStatement
  75.       END
  76. CLOSE Cur2
  77. DEALLOCATE Cur2
  78. /* Recreate foreign key constraints  */
  79. DECLARE Cur3 CURSOR READ_ONLY
  80. FOR
  81.         SELECT  CreateStmt
  82.         FROM    @dropAndCreateConstraintsTable
  83. OPEN Cur3
  84. FETCH NEXT FROM Cur3 INTO @RecreateStatement
  85. WHILE @@FETCH_STATUS = 0
  86.       BEGIN
  87.             PRINT 'Executing ' + @RecreateStatement
  88.             EXECUTE sp_executesql @RecreateStatement
  89.             FETCH NEXT FROM Cur3 INTO @RecreateStatement
  90.       END
  91. CLOSE Cur3
  92. DEALLOCATE Cur3
  93. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement