我有一个数据库在SQL Server 2008 R2有很多表(超过200),并有许多表之间的关系。 在最关系的删除规则是无动作 我需要一个 是更新到级联一次 因为在我的数据库太多关系的所有关系删除规则我不想做一个有什么办法?在sql server中更新所有外键约束?
0
A
回答
1
通常,当您使用SSMS GUI修改外键约束时,后台上的SQL Server实际上会丢弃并重新创建相同的内容。
这里是一个脚本,将生成的SQL全部丢弃FKeys与ON UPDATE CASCADE ON DELETE CASCADE
选项
假设是重新创建它们,你的所有FKeys是名“FK .....”
SET NOCOUNT ON;
DECLARE @Objects TABLE
(
ID int identity(1,1),
TableName sysname,
SchemaName sysname
)
INSERT INTO @Objects (TableName, SchemaName)
SELECT
TABLE_NAME,
CONSTRAINT_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE CONSTRAINT_NAME LIKE 'FK%'
DECLARE @min int, @max int,@table sysname,@schema sysname
SELECT @min = 1, @max = MAX(ID) FROM @Objects
WHILE @min <[email protected]
BEGIN
SELECT
@table = TableName,@schema = SchemaName FROM @Objects WHERE ID = @min
print '/*Drop Foreign Key Statements for [' + @schema + '].[' + @table + ']*/'
SELECT
'ALTER TABLE [' + SCHEMA_NAME(o.schema_id) + '].[' + o.name + ']
DROP CONSTRAINT [' + fk.name + ']'
FROM sys.foreign_keys fk
INNER JOIN sys.objects o
ON fk.parent_object_id = o.object_id
WHERE o.name = @table AND
SCHEMA_NAME(o.schema_id) = @schema
print '/*Create Foreign Key Statements for ['
+ @schema + '].[' + @table + ']*/'
SELECT
'ALTER TABLE [' + SCHEMA_NAME(o.schema_id) + '].[' + o.name + ']
ADD CONSTRAINT [' + fk.name + '] FOREIGN KEY ([' + c.name + '])
REFERENCES [' + SCHEMA_NAME(refob.schema_id) + '].[' + refob.name + ']
([' + refcol.name + '])ON UPDATE CASCADE ON DELETE CASCADE'
FROM sys.foreign_key_columns fkc
INNER JOIN sys.foreign_keys fk
ON fkc.constraint_object_id = fk.object_id
INNER JOIN sys.objects o
ON fk.parent_object_id = o.object_id
INNER JOIN sys.columns c
ON fkc.parent_column_id = c.column_id AND
o.object_id = c.object_id
INNER JOIN sys.objects refob
ON fkc.referenced_object_id = refob.object_id
INNER JOIN sys.columns refcol
ON fkc.referenced_column_id = refcol.column_id AND
fkc.referenced_object_id = refcol.object_id
WHERE o.name = @table AND
SCHEMA_NAME(o.schema_id) = @schema
SET @min = @min+1
END
希望这有助于。
拉吉
PS:设置查询输出到文本帮助。另请阅读您问题上的评论。任意设置CASCADE
可能不是正确的做法
+0
你的查询只是显示命令做的。你可以改变它执行? –
+0
DDL查询需要在执行前进行审查。是否可以复制输出并在新的查询窗口中执行? – Raj
相关问题
- 1. SQL Server有条件的外键约束
- 2. SQL Server中的外键约束
- 3. 外键约束SQL
- 4. 对外键的SQL Server约束
- 5. SQL Server外键约束好处
- 6. SQL Server 2008外键约束错误
- 7. 如何在Sql Server 2000的表中删除所有外键约束?
- 8. 外键约束是否在没有用约束更新列的SQL更新语句上检查?
- 9. SQL删除更新外键主键约束
- 10. 如何删除所有表中的所有外键约束?
- 11. SQL错误外键约束
- 12. SQL与外键约束
- 13. 如何仅在sql server中存在外键约束?
- 14. 更新,外键约束和空值
- 15. MySQL更新外键约束失败
- 16. 我们如何更新DB2中具有外键约束的列?
- 17. 在表中添加外键约束vs添加外键约束的变更表
- 18. 临时桌子上没有外键约束? SQL Server 2008
- 19. 使用键和约束在SQL Server Express
- 20. 外键约束
- 21. 外键约束
- 22. 外键约束
- 23. SQL Server约束
- 24. SQL Server - 约束
- 25. 从外键约束
- 26. 更改外键约束命名约定
- 27. 外键:与外键约束
- 28. 更改在MySQL中具有外键约束的表主键
- 29. SQL中的复杂外键约束
- 30. 删除SQL行忽略所有外键和约束
在任何适度复杂的数据库中,可能存在多个级联路径,SQL Server的级联选项不允许使用这些级联路径 - 因此,您需要仔细规划哪些路径实际上会转向(然后或者离开其余的,或者你将不得不通过触发器来实现) –
@Damien_The_Unbeliever:另外,在任何适度复杂的数据库中,几乎肯定会有至少一些外键不应该级联更新或删除。 –