一位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,然后删除临时表
答案 0 :(得分:2)
检查列存在的语法是:
IF EXISTS (SELECT * FROM sys.columns
WHERE object_id = OBJECT_ID('YourTableName')
AND name = 'YourColumnName')
BEGIN
-- your logic goes here
END