2011-11-07 5 views
2

テーブルを監視して、レコードが挿入される非常に時間がかかります。このテーブルにはITN IDENTITYフィールドはなく、主キーとしてUNIQUEIDENTIFIERのみがあります。既存の入力、SPなどを変更することなく、トリガー内から最後に挿入されたIDを見つける必要があります。これは私が(明らかに動作しません)持っているものです。SQL 2005データベースからTRIGGER内のテーブルに最後のUNIQUEIDENTIFIERを挿入します

CREATE TRIGGER TR_UserInserted 
    ON Users 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    EXEC UserInserted (SELECT User_Id FROM INSERTED); 

END 
GO 

ここで私は、ユーザーテーブルに最後に挿入されたレコードからUSER_IDを取得し、UserInserted SPを通してそれを実行しようとしています。助けてくれてありがとう、私は困惑しています。

HLGEMバルクインサートであっても、最後のレコードが挿入されている必要があります。これは奇妙なリクエストです。

+1

トリガーが機能しない1つの理由は、挿入されたテーブルに1つのレコードしか存在しないという非常に貧弱な仮定を行ったことです。これはトリガでは受け入れられません。 複数のレコードがある場合は、すべてのレコードをUserInsertedストアドプロシージャで実行する必要がありますか?または最後のものだけ? – HLGEM

+0

最後の1つだけ – naspinski

+1

最後のものが表示されます。 – HLGEM

答えて

2

あなたは、INSERTの代わりに発射するようにトリガを変更する必要があります。 uniqueidentifier変数は、NEWID()関数を使用して生成する必要があります。トリガー本体のINSERTステートメントでは、列を順番に提供する必要があります。 (これを正しく動作させるには

CREATE TRIGGER TR_UserInserted ON Users 
INSTEAD OF INSERT AS 
BEGIN 

DECLARE @newid uniqueidentifier = NEWID() 

INSERT INTO Users 
SELECT 
    First, 
    @newid, 
    Third, 
    Fourth 
FROM inserted 

EXECUTE UserInserted(@newid) 
-- you can actually provide all the columns to UserInserted 

END 

、テーブルがNEWIDとして、主キーのデフォルトを持っていないことを確認してください。そして、トリガーがある

CREATE TABLE Users (
    First int, 
    User_Id uniqueidentifier PRIMARY KEY, 
    Third int, 
    Fourth int) 

:この方法で定義されたテーブルを想定すると、 )

関連する問題