2013-10-11 71 views
1

位一個SQL新手,所以希望解釋這個確定:SQL Server的部署前後腳本

所以我有一個USCars和USCars_AUD(審計)表。然後我有一輛Cars和一輛Cars_AUD表。

在我的USCars和USCars_AUD表中,我有一列描述。我從表格中刪除此列並將其添加到Main Cars和Cars_AUD表格中。

我們有一個數據庫項目來做到這一點,並有前置和後置部署腳本。 USCars和USCars_AUD中的Id列將與Cars和Cars_AUD表相同。

所以我已經更新數據庫中的項目我的模式對象,以反映USCars和USCars_AUD將描述刪除,它被添加到汽車和Cars_AUD。

我掙扎了一下與查詢運行部署前和部署後。理想情況下,我想要一個IF類型的條件 - 說只有當USCars表包含說明列時才運行。 (不知道這是可能的)

然後我需要所有的數據從兩個表到臨時表複製預部署

-- need an If conditional to only run if USCars table contains Description 
    -- then begin /end 
print 'Moving USCars and Cars and Audit tables and related data to temp tables' 
     exec sp_executesql N' 
select * into Upgrade_USCars from USCars 
select * into Upgrade_USCars_AUD from USCars_AUD 
' 

現在汽車的表中有一些額外的信息,是不是在USCars所以我需要選擇它的所有內容加入由Id加入的臨時表中?因此,其結果將是我希望我的最後的汽車和Cars_AUD表包含一切它在它原本但如果它在我需要特別說明用相同的ID複製到該行的USCars和USCars_AUD表說明

在後部署,那麼我會插入來自該加入臨時表中的值返回到汽車的表,然後刪除臨時表

回答

2

語法檢查列的存在是:

IF EXISTS (SELECT * FROM sys.columns 
      WHERE object_id = OBJECT_ID('YourTableName') 
       AND name = 'YourColumnName') 
BEGIN 
    -- your logic goes here 
END 
+0

感謝 - 這就是我需要 - 左外連接爲我的其他部分工作,並檢查其中一個臨時表是不是空後部署腳本是我用我的if ()開始結束塊。 –