2013-10-11 39 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 ()开始结束块。 –