如何以兼容MSSQL 2000和2005的方式将这两个SQL语句合并为一个?

时间:2009-04-08 20:22:37

标签: sql-server sql-server-2005 tsql sql-server-2000

我的最终目标是实现以下目标:

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中均有效。

3 个答案:

答案 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)

SQL Server 2005中引入了

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