【问题标题】:SQL Server Pre and Post Deployment ScriptsSQL Server 部署前和部署后脚本
【发布时间】:2013-10-14 19:45:31
【问题描述】:

有点 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 中,然后删除这些临时表

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢 - 这就是我需要的 - 左外连接适用于我的另一部分,并且在部署后脚本中检查一个临时表不为空是我用于 if() 开始结束块的内容.
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2017-08-18
    • 2014-06-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多