我有一個數據庫有1000多個表。我正在創建新的空白設置。爲此,我必須截斷所有的表格,但是我不希望截斷所有表格,所以我在表格上創建並將名稱存儲在表格中。用外鍵截斷表
----------- Create hardcode table ----------------------
Create table TblHardCodeTableNotToTruncate(TableName varchar(100))
go
insert into TblHardCodeTableNotToTruncate
select 'TblHardCodeTableNotToTruncate'
go
---- insert the table names which dont wish to truncate ------------
Insert into TblHardCodeTableNotToTruncate
select 'TblAccount'
go
Insert into TblHardCodeTableNotToTruncate
select 'TblCity'
go
等,以下是我用來截斷除了這些inserted表
------------------------- Truncate all the tables except the tables specified in the Hardcode table -------------------------
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
GO
DECLARE @TBLTEMP TABLE(TABLENAME VARCHAR(100))
insert into @TBLTEMP
select name from sysobjects where xtype = 'U'
delete from @TBLTEMP where tablename in (
select tablename from TblHardCodeTableNotToTruncate)
DECLARE @SQLQUERY VARCHAR(MAX) =''
DECLARE @INTCNT INT = 1
DECLARE @TABLENAME VARCHAR(100) =''
WHILE (SELECT COUNT(*) FROM @TBLTEMP) > 0
BEGIN
select top 1 @TABLENAME = TABLENAME from @TBLTEMP
SET @SQLQUERY = 'Truncate table ' + @TABLENAME
EXEC(@SQLQUERY)
PRINT @SQLQUERY
DELETE FROM @TBLTEMP WHERE TABLENAME = @TABLENAME
END
go
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
go
所有表查詢,但我得到的錯誤外鍵引用錯誤。我知道在做之前我需要放棄約束。但有沒有辦法做到這一點,因爲我不能刪除然後截斷,並再次添加這麼多的表。是否有任何獨特的腳本可以在下面寫入,如果存在,則會刪除約束,截斷表並將再次刪除的約束再次添加到表中。
我想你正在尋找這個腳本來啓用,禁用,刪除和重新創建基於主鍵表的FKs:http://www.mssqltips.com/sqlservertip/1376/disable-enable-drop-and-recreate- sql-server-foreign-keys/ – Deepshikha
我是空白的,你可以告訴我什麼我可以在我的while循環中寫入 –