2009-04-08 11 views
0

Mon objectif final est d'accomplir quelque chose comme:Comment combiner ces deux instructions SQL en une seule, d'une manière compatible avec MSSQL 2000 et 2005?

CREATE FOREIGN KEY IF NOT EXISTS FOREIGN KEY 

Depuis cette déclaration ne semble pas exister, je tente de sorte de kludge ensemble.

J'ai une déclaration qui renverra le nom FK si elle existe:

SELECT f.name AS ForeignKey 
FROM sys.foreign_keys AS f 
WHERE OBJECT_NAME(f.parent_object_id) = 'myTableName' 

et moi avons une déclaration qui ajoute la clé étrangère souhaitée:

ALTER TABLE myTableName 
WITH CHECK 
ADD CONSTRAINT [FK_myTableName_otherTable] 
FOREIGN KEY([columnName]) 
REFERENCES otherTable ([otherColumn]) 

Je ne peux pas, pour la vie de moi, comprendre comment les écraser ensemble dans une seule déclaration.

Il est une exigence absolue que les travaux de solution dans les deux MS SQL 2000, ainsi que MS SQL 2005.

Répondre

1

sys.foreign_keys a été introduit dans SQL Server 2005. Vous devez utiliser sysobjects pour être compatible avec SQL Server 2000 & 2005.

Try this 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]) 
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 
+0

Ha, je savais que ça allait être quelque chose d'évident. Merci! –

+0

Ah, mais comme @bdukes l'a souligné, mon SQL original ne fonctionnera pas dans MSSQL 2000. Désolé de vous l'enlever, mais je dois lui donner la réponse acceptée. –

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 
Questions connexes