我需要在使用SSDT發佈我的數據庫後填充編碼列表。所以我已經爲項目添加了新的部署後腳本,並且使用SQLCMD:r命令調用另一個腳本,每個腳本將數據插入到一個表中。但是如果表格已經填滿,則會違反主鍵約束,並且整個設置被打破。忽略SSDT後部署腳本中的錯誤
如何抑制部署後腳本中的錯誤?不支持SQLCMD命令:on error ignore
。
我需要在使用SSDT發佈我的數據庫後填充編碼列表。所以我已經爲項目添加了新的部署後腳本,並且使用SQLCMD:r命令調用另一個腳本,每個腳本將數據插入到一個表中。但是如果表格已經填滿,則會違反主鍵約束,並且整個設置被打破。忽略SSDT後部署腳本中的錯誤
如何抑制部署後腳本中的錯誤?不支持SQLCMD命令:on error ignore
。
爲什麼不修改腳本以避免重新插入現有值?使用公共表表達式,你將有類似的東西:
;with cte as (select *, row_number() over (partition by ... order by ...) as Row from ...)
insert into ...
select ...
from cte where not exists (...) and cte.Row = 1
離不開有你的表定義更加明確...
這裏有一個如何實現你正在尋找使用一個很好的例子MERGE語句而不是原始INSERT。
但是,對於這種方法要小心,因爲表值函數方法最多隻支持1K條記錄,因此將#temptable組合插入#table,然後合併(使用#temptable源代碼)類型策略。只是站起來;我遇到了這個限制。 – SnapJag 2014-01-24 22:27:50
是的,這是一種可能的解決方案。但我正在尋找更一般的東西,只能在主要的部署後腳本中使用它。 – 2012-04-10 13:27:18
我認爲這是最乾淨的解決方案。如果沒有首先清理表(或刪除/重新創建表),刪除主鍵約束(通過alter table ... drop constraint)可能會創建重複項(並且會在嘗試重新建立約束時導致錯誤通過改變表...添加約束...主鍵(...)) – 2012-04-10 14:01:51
即使迴應也不回答我的問題。它可以幫助類似的情況。所以我接受它。 – 2012-04-12 08:46:55