sql >> データベース >  >> RDS >> Sqlserver

INSERT INTO Table (etc) SELECT * FROM Table2 中に挿入された各行でトリガーを起動するにはどうすればよいですか?

    挿入トリガーは一括挿入のために一度呼び出されますが、トリガーでは特別な inserted を使用できます テーブルを使用して、挿入されたすべての行を取得します。

    table に挿入されたすべての行をログに記録する、このような挿入トリガーがあるとします。

    create trigger trgInsertTable 
    on dbo.table
    for insert
    as
       insert tableLog(name)
        select name from inserted
      

    このトリガーを使用して、table に一括挿入を行うと、 、tableLog table に挿入されたのと同じ数の行で埋められます

    特定のトリガーでは、行ごとにストアド プロシージャを呼び出す必要があるため、カーソルを使用する必要があります。

    ALTER TRIGGER dbo.Notify
        ON  dbo.Table
        AFTER INSERT
    AS 
    BEGIN
    
        DECLARE @EmailSender varchar(50)='Sender Profile'
        DECLARE @User varchar(20)
        DECLARE @Subject varchar(50)
    
        DECLARE cursor CURSOR FOR
          SELECT User, '(' + CONVERT(varchar, Id) + ')!'
            FROM inserted
    
        OPEN cursor
        FETCH NEXT FROM cursor INTO @User, @Subject
        WHILE @@FETCH_STATUS = 0
        BEGIN
          exec msdb.dbo.sp_send_dbmail
              @[email protected],
              @[email protected]
              @[email protected],
              @body='//etc'
          FETCH NEXT FROM cursor INTO @User, @Subject
        END
        CLOSE cursor
        DEALLOCATE cursor
    
    END
      

    テストはしていませんが、動作するはずです



    1. ファイルを調べたり、BLOBを介してSQL LIKE%x%クエリを実行したりすると、一般的に高速なものは何ですか?

    2. JDBCドライバークラスが見つかりません:oracle.jdbc.OracleDriver

    3. MATCHAGAINSTがMariaDBでどのように機能するか

    4. mysqlのExcel形式の日付