我需要向现有 SQL Server 表添加约束,但前提是该表尚不存在。
我使用以下 SQL 创建约束。
ALTER TABLE [Foo] ADD CONSTRAINT [FK_Foo_Bar] FOREIGN KEY ([BarId]) REFERENCES [Bar] ([BarId]) ON UPDATE CASCADE ON DELETE CASCADE
我希望可以在 SQL 的开头添加一些 SQL 来测试约束是否存在,但我不知道如何添加。
最佳答案
就我个人而言,我会放弃现有的约束,然后重新创建它 - 以防已有的约束在某种程度上有所不同
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[MyFKName]') AND OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE dbo.MyTableName DROP CONSTRAINT MyFKName
GO
ALTER TABLE dbo.MyTableName ADD CONSTRAINT [MyFKName] ...
我当前使用的更现代的代码是:
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[MyFKName]') AND parent_object_id = OBJECT_ID(N'[dbo].[MyTableName]'))
ALTER TABLE dbo.[MyTableName] DROP CONSTRAINT [MyFKName]
GO
ALTER TABLE dbo.[MyTableName] ADD CONSTRAINT [MyFKName] FOREIGN KEY ...
不确定检查 sys.objects ...或 sys.foreign_keys ...是否有任何优势...但在某些时候我决定使用 sys.foreign_keys
从 SQL2016 开始,添加了新的“IF EXISTS”语法,该语法更具可读性:
-- For SQL2016 onwards:
ALTER TABLE dbo.[MyTableName] DROP CONSTRAINT IF EXISTS [MyFKName]
GO
ALTER TABLE dbo.[MyTableName] ADD CONSTRAINT [MyFKName] FOREIGN KEY ...
关于sql-server - SQL Server : How do I add a constraint to an existing table but only if the constraint does not already exist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547074/