0

LINQ-to-SQLクラスを使用しています。LINQメソッドを使用して新しい行を挿入していobject.InsertOnSubmit()ます。

Identityテーブルの主キー列に(を使用して)SQLServerによって生成されるのと同じ値を設定する必要があります。

これで、テーブルに新しい行を挿入するときに同じ値が必要になります。また、挿入時のみ、同じテーブルの他の列に同じ値を設定してください。

テーブルにUPDATETRIGGERがあるため、挿入後のように更新できません。

私は以下を試しました

_db.EmpNews.InsertOnSubmit(_EmpNews);
...
_db.DisplaySeq = _EmpNews.ID;
...
_db.SubmitChanges();

ID自動生成された(Identity)列はどこにありますか。

4

1 に答える 1

4

最初の疑問は、なぜ同じ値を同じテーブルの 2 つの別々の列に格納する必要があるのか​​ということです。これは何のために必要ですか?私にはあまり意味がないように思えます....

列の値はIDENTITY行が実際に挿入された後にのみ使用できるため、行が実際にデータベース テーブルに保存される前に、その値を取得して別の列に設定する方法はありません。

基本的に、その値を取得して別の場所に保存するための 3 つのオプションが残ります。

  • 列に挿入されたばかりの値に他の列をAFTER INSERT設定するトリガーを書くことができますIDENTITY

  • オブジェクトを保存するだけでなく、保存プロセス全体をC#コードから呼び出すストアドプロシージャにラップしINSERT、行を実行してから、新しく作成されたIDENTITY値を取得し、その新しい値で行を再度更新します. しかし、それは発生する原因になりUPDATEます-トリガーのために不可能だとあなたが言っているようです(なぜUPDATEこれが問題になるのかははっきりしていません....)

  • 2 行の C# コードを記述して、IDENTITY値が挿入された後 (IDオブジェクトのプロパティで使用可能) に値を取得し、オブジェクトを 2 回目に保存することができます。しかし、それも原因となりUPDATEます-トリガーのために不可能だとあなたは言っているようです(なぜUPDATEこれが問題になるのかははっきりしていません....)

したがって、あなたの最善の選択肢は、INSERTこれを行うきっかけになると思います。

次のようなことを試してください:

CREATE TRIGGER trInsertEmpNews 
ON dbo.EmpNews AFTER INSERT 
AS BEGIN
    UPDATE dbo.EmpNews 
    SET DisplaySeq = i.ID
    FROM INSERTED i
    WHERE dbo.EmpNews.ID = i.ID
END
于 2012-12-25T07:34:01.670 に答える