私は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;
}
}
だから私の質問です:私は数2627または2601で例外を作成するために私のトリガー内RAISERROR
を使用することができますか?
おかげで、けっこうだ。私が理解しているのは、左結合も、共用体も、サブクエリもない場合にのみ、SQL Server 2005でスキーマ・バインド・ビューを索引付けできるということです。私の意見では、これらは必ずしも複雑すぎるとは限りません。 – Paul
@Paul:インデックス付きのビューを維持するには、これらのコンストラクトで多くの処理が必要になるためです。 「インデックス付きビューでOUTER JOINを使用できないのはなぜですか?」を参照してください。 in http://msdn.microsoft.com/en-us/library/dd171921%28SQL.100%29.aspx – gbn
申し訳ありませんが、私はビューとして役立つにはあまりにも複雑であることを意味しました.SQL Serverがインデックスを維持するにはそれほど複雑ではありません。私の場合、ビューには外部結合はありませんが、ROW_NUMBER()関数の結果に基づいて制限できるようにサブクエリがあります。 – Paul