1

有点 SQL 新手所以希望能解释一下:

所以我有一个 USCars 和一个 USCars_AUD(用于审计)表。然后我有一个 Cars 和一个 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 表包含描述列时运行。(不确定这是否可能)

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

    -- 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 temp 表中的值插入到 Cars Table 中,然后 Drop the temp 表

4

1 回答 1

2

检查列是否存在的语法是:

IF EXISTS (SELECT * FROM sys.columns 
           WHERE object_id = OBJECT_ID('YourTableName') 
              AND name = 'YourColumnName')
BEGIN
  -- your logic goes here
END
于 2013-10-11T15:55:53.063 回答