SQL Server前后部署脚本

时间:2013-10-11 15:11:32

标签: sql sql-server

一位SQL新手所以希望能解释一下这个:

所以我有一张USCars和一张USCars_AUD(用于审核)表。然后我有一辆汽车和一辆Cars_AUD表。

在我的USCars和USCars_AUD表中,我有一个列描述。我将从表中删除此列并将其添加到Main Cars和Cars_AUD表中。

我们有一个数据库项目来执行此操作,并且有前后部署脚本。 USCars和USCars_AUD中的Id列与Cars和Cars_AUD表中的ID相同。

所以我更新了数据库项目中的模式对象,以反映USCars和USCars_AUD将删除描述并将其添加到Cars和Cars_AUD。

我在查询中遇到了一些困难,无法运行预部署和部署后。理想情况下,我想要一个IF类型条件 - 比如说只有在USCars表包含description列时运行。 (不确定是否可能)

然后我需要将两个表中的所有数据复制到预部署中的临时表

    -- 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
'

现在Cars表中有一些不在USCars中的额外信息,所以我需要选择从它加入由Id连接的临时表中的所有内容吗?因此,结果将是我希望我的最终Cars和Cars_AUD表包含它最初的所有内容,但是它在USCars和USCars_AUD表中有一个描述,我希望将描述复制到具有相同Id的行

在Post Deploy中,我会将此Joined临时表中的值插回到Cars Table,然后删除临时表

1 个答案:

答案 0 :(得分:2)

检查列存在的语法是:

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