代码之家  ›  专栏  ›  技术社区  ›  Adam Tuttle

如何将这两个SQL语句组合成一个,并与MSSQL2000和2005兼容?

  •  0
  • Adam Tuttle  · 技术社区  · 16 年前

    我的最终目标是完成以下任务:

    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 回复  |  直到 16 年前
        1
  •  1
  •   bdukes Jon Skeet    16 年前

    sys.foreign_keys 在SQL Server 2005中引入。你得用 sysobjects 与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
  •  3
  •   KM.    16 年前
    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
    
        3
  •  0
  •   Seibar    16 年前
    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