2012-04-10 30 views
1

我需要在使用SSDT發佈我的數據庫後填充編碼列表。所以我已經爲項目添加了新的部署後腳本,並且使用SQLCMD:r命令調用另一個腳本,每個腳本將數據插入到一個表中。但是如果表格已經填滿,則會違反主鍵約束,並且整個設置被打破。忽略SSDT後部署腳本中的錯誤

如何抑制部署後腳本中的錯誤?不支持SQLCMD命令:on error ignore

回答

0

爲什麼不修改腳本以避免重新插入現有值?使用公共表表達式,你將有類似的東西:

;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 

離不開有你的表定義更加明確...

+0

是的,這是一種可能的解決方案。但我正在尋找更一般的東西,只能在主要的部署後腳本中使用它。 – 2012-04-10 13:27:18

+0

我認爲這是最乾淨的解決方案。如果沒有首先清理表(或刪除/重新創建表),刪除主鍵約束(通過alter table ... drop constraint)可能會創建重複項(並且會在嘗試重新建立約束時導致錯誤通過改變表...添加約束...主鍵(...)) – 2012-04-10 14:01:51

+0

即使迴應也不回答我的問題。它可以幫助類似的情況。所以我接受它。 – 2012-04-12 08:46:55

2

這裏有一個如何實現你正在尋找使用一個很好的例子MERGE語句而不是原始INSERT。

http://blogs.msdn.com/b/ssdt/archive/2012/02/02/including-data-in-an-sql-server-database-project.aspx

+1

但是,對於這種方法要小心,因爲表值函數方法最多隻支持1K條記錄,因此將#temptable組合插入#table,然後合併(使用#temptable源代碼)類型策略。只是站起來;我遇到了這個限制。 – SnapJag 2014-01-24 22:27:50