Rob*_*ert 11 t-sql sql-server sql-server-2005 sql-server-2008
在表"A"上依赖于30个其他表格通过FK到"A.Id".
对于集成测试,我必须删除表并重新创建它以创建已定义的状态.由于依赖对象,它们似乎无法删除和重新创建表.错误消息是:
无法删除对象'dbo.A',因为它是由FOREIGN KEY约束引用的
问题(S):
浏览sys.foreign_key_columns系统表.这是我放置的一个例子,给定一个表,告诉你哪个列被键入另一个表:
DECLARE @tableName VARCHAR(255)
SET @tableName = 'YourTableName'
SELECT OBJECT_NAME(fkc.constraint_object_id) AS 'FKName', OBJECT_NAME(fkc.[referenced_object_id]) AS 'FKTable', c2.[name] AS 'FKTableColumn', @tableName AS 'Table', c1.[name] AS 'TableColumn'
FROM sys.foreign_key_columns as fkc
JOIN sys.columns AS c1 ON c1.[object_id] = fkc.[parent_object_id] AND c1.[column_id] = fkc.[parent_column_id]
JOIN sys.columns AS c2 ON c2.[object_id] = fkc.[referenced_object_id] AND c2.[column_id] = fkc.[referenced_column_id]
WHERE fkc.[parent_object_id] = OBJECT_ID(@tableName)
ORDER BY OBJECT_NAME(fkc.constraint_object_id)
Run Code Online (Sandbox Code Playgroud)
有了这个,或者有一些变化,你可以找到外键,删除它们,做你的东西,然后重新创建外键.
我应该补充一点,我知道这适用于SQL2005和SQL2008.我真的不知道它是否适用于SQL2000/MSDE.
转到 SSMS 中的数据库并右键单击。选择任务,生成脚本。然后浏览选项并按照您想要的方式设置它们(可能只选择表中的外键并创建依赖对象并删除并重新创建,不要在我面前有选项,但您会看到它们。然后选择您的表想要为 FK 编写脚本并将其编写到一个文件中。打开该文件并将 drop 语句分离到一个文件中,将 create 语句分离到另一个文件中。现在您有了 tweo 文件,您可以运行 do 自动执行您想要的操作,只要您运行 run我建议在运行第一个测试之前重新创建文件(以防它们自上次运行测试以来发生了更改),但不是针对每个单独的测试。