我有一個視圖,它具有INSTEAD OF INSERT
觸發器(在SQL Server 2005中)。當用戶插入到視圖中時,他們實際上正在插入並更新許多表。視圖非常複雜,不能有索引,所以不幸的是不受約束。使用RAISERROR在t-SQL中引發特定錯誤
該視圖正在從C#插入,使用代碼可能會有問題需要更改。此代碼使用捕獲主要和唯一鍵違反了以下內容:
try
{
... // Insert into view
}
catch (SqlException ex)
{
if (ex.Number == 2627 || ex.Number == 2601) // Primary key exception, unique constraint violation
{
... // Report the duplicate entry to the user
}
else
{
throw;
}
}
所以我的問題是:我可以用我的RAISERROR
觸發器內創建具有數2627或2601個例外?
謝謝,很公平。我的理解是,如果模式綁定視圖沒有左連接,沒有聯合和沒有子查詢,則只能在SQL Server 2005中編入索引。在我看來,這些看法不一定太複雜。 – Paul
@Paul:他們這樣做是因爲維護一個索引視圖需要對這些構造進行大量的處理。請參閱「爲什麼我不能在索引視圖中使用OUTER JOIN?」在http://msdn.microsoft.com/en-us/library/dd171921%28SQL.100%29.aspx – gbn
對不起,我的意思是太複雜,不適合作爲一個視圖,不要太複雜的SQL Server維護一個索引根據。在我的情況下,視圖沒有外連接,但有一個子查詢,以便我可以根據ROW_NUMBER()函數的結果進行限制。 – Paul