2011-04-08 27 views
0

我試圖在一個腳本中創建2個表。第一個是帶有主鍵的圖像表,第二個是具有鏈接到圖像表ID的外鍵的文章表。代碼:SQL:在一個腳本中創建多個從屬表

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Image') 
     CREATE TABLE [Image] 
     (
      [ImageId]      INT IDENTITY(1,1)  NOT NULL, 
      [FileName]      NVARCHAR(20)   NOT NULL, 
      [ImageData]      VARBINARY(MAX)   NOT NULL, 
      CONSTRAINT PK_ImageId PRIMARY KEY CLUSTERED (ImageId ASC) 
      ON [PRIMARY] 
     ) 

    IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Article') 
     CREATE TABLE Article 
     (
      ArticleId      INT IDENTITY(1,1)  NOT NULL, 
      CreatedAt      DATE     NOT NULL 
      CONSTRAINT D_ArticleDate DEFAULT GETDATE(), 
      Title       NVARCHAR(20)   NOT NULL, 
      Body       NVARCHAR(MAX)   NOT NULL, 
      MainImageId      INT      NULL, 
      CONSTRAINT PK_ArticleId PRIMARY KEY CLUSTERED (ArticleId ASC) 
      ON [PRIMARY], 
      CONSTRAINT FK_MainImageId FOREIGN KEY (MainImageId) REFERENCES [Image] (PK_ImageId) 
     ) 

如果我運行圖像查詢它運行良好。如果我然後運行文章查詢它運行良好。如果我一次運行兩個查詢,我會得到以下錯誤:

外鍵'FK_MainImageId'在引用表'Image'中引用無效列'PK_ImageId'。

有沒有辦法在一個腳本中做到這一點?

回答

2

你應該引用ImageId,而不是約束名PK_ImageId這樣的 -

CONSTRAINT FK_MainImageId FOREIGN KEY (MainImageId) REFERENCES [Image] (ImageId)

,並嘗試在兩批之間GO statements..to立刻執行。

+0

這就是問題所在。我引用了錯誤的東西。謝謝! – VARAK 2011-04-08 17:19:27

0

嘗試在第一個查詢後添加「GO」。我認爲這應該工作。

0

在一個腳本中,只需在兩個操作之間放置一個GO即可。這將腳本分成兩批。 GO是由SSMS和一些其他工具(如SQLCMD)支持的批分隔符。