web-dev-qa-db-ja.com

SQL Serverトリガーは、新しい行から別のテーブルに値を挿入します

Asp.netメンバーシップスキーマを使用するサイトがあります。新しい行のuser_idとuser_nameを別のテーブルに挿入したaspnet_usersテーブルにトリガーを設定したいと思います。

最後の挿入から値を取得するにはどうすればよいですか?

最後のdate_createdまでに選択できますが、臭いのようです。もっと良い方法はありますか?

30
jim

sQLサーバーでこれを試してください

CREATE TRIGGER yourNewTrigger ON yourSourcetable
FOR INSERT
AS

INSERT INTO yourDestinationTable
        (col1, col2    , col3, user_id, user_name)
    SELECT
        'a'  , default , null, user_id, user_name
        FROM inserted

go
58
KM.

挿入トリガーを使用します-トリガー内で、挿入された行項目は、トリガーが定義されているテーブルと同じ列レイアウトを持つ論理テーブルINSERTEDとして公開されます。

削除トリガーは、DELETEDと呼ばれる同様の論理テーブルにアクセスできます。

更新トリガーは、更新された値を含むINSERTEDテーブルと、更新される値を含むDELETEDテーブルの両方にアクセスできます。

14
Oded

トリガーでOLDNEWを使用して、そのトリガーで変更された値にアクセスできます。 Mysql Ref

5
Teja Kantamneni

SQL Serverトリガーには、挿入および削除と呼ばれる2つのpsdeuotableがあります。これらには、レコードの古い値と新しい値が含まれます。

そのため、トリガー内で(トリガーの作成部分を簡単に調べることができます)次のようなことを行います。

Insert table2 (user_id, user_name)
select user_id, user_name from inserted i
left join table2 t on i.user_id = t.userid
where t.user_id is null

トリガーを記述するとき、情報のバッチ全体に対して1回だけ動作することを覚えておいて、行ごとに処理しません。したがって、コード内の複数行の挿入を考慮してください。

5
HLGEM

トリガーのコンテキストにいるときは、テーブルに挿入されたばかりのすべての行を含む論理テーブルINSERTEDにアクセスできます。 Insertedからの選択に基づいて、他のテーブルへの挿入を作成できます。

4
cmsjr
Create 
trigger `[dbo].[mytrigger]` on `[dbo].[Patients]` after update , insert as
begin
     --Sql logic
     print 'Hello world'     
 end 
1
Adil iqbal