我的最终目标是实现以下目标:
CREATE FOREIGN KEY IF NOT EXISTS FOREIGN KEY
由于该陈述似乎并不存在,我试图将它整合起来。
我有一个声明,如果它存在,将返回FK名称:
SELECT f.name AS ForeignKey
FROM sys.foreign_keys AS f
WHERE OBJECT_NAME(f.parent_object_id) = 'myTableName'
我有一个声明添加了所需的外键:
ALTER TABLE myTableName
WITH CHECK
ADD CONSTRAINT [FK_myTableName_otherTable]
FOREIGN KEY([columnName])
REFERENCES otherTable ([otherColumn])
我不能,为了我的生活,弄清楚如何将它们混合成一个单独的陈述。
绝对要求该解决方案在MS SQL 2000和MS SQL 2005中均有效。
答案 0 :(得分:3)
if not exists (SELECT f.name AS ForeignKey
FROM sys.foreign_keys AS f
WHERE OBJECT_NAME(f.parent_object_id) = 'myTableName'
)
begin
ALTER TABLE myTableName
WITH CHECK
ADD CONSTRAINT [FK_myTableName_otherTable]
FOREIGN KEY([columnName])
REFERENCES otherTable ([otherColumn])
end
答案 1 :(得分:1)
sys.foreign_keys。您必须使用sysobjects兼容SQL Server 2000和SQL Server 2000。 2005。
试试这个SQL:
IF NOT EXISTS (
SELECT NULL FROM sysobjects
WHERE name = 'FK_myTableName_otherTable'
AND parent_obj = OBJECT_ID(N'myTableName'))
ALTER TABLE myTableName
WITH CHECK
ADD CONSTRAINT [FK_myTableName_otherTable]
FOREIGN KEY([columnName])
REFERENCES otherTable ([otherColumn])
答案 2 :(得分:0)
if not exists (
SELECT f.name AS ForeignKey
FROM sys.foreign_keys AS f
WHERE OBJECT_NAME(f.parent_object_id) = 'myTableName')
begin
ALTER TABLE myTableName
WITH CHECK
ADD CONSTRAINT [FK_myTableName_otherTable]
FOREIGN KEY([columnName])
REFERENCES otherTable ([otherColumn])
end