Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để tôi có thể kích hoạt trình kích hoạt trên mỗi hàng được chèn trong khi CHÈN VÀO Bảng (v.v.) CHỌN * TỪ Bảng2?

Trình kích hoạt chèn được gọi một lần cho các lần chèn hàng loạt, nhưng trên trình kích hoạt, bạn có thể sử dụng inserted đặc biệt bảng để nhận tất cả các hàng đã chèn.

Vì vậy, hãy tưởng tượng bạn có một trình kích hoạt chèn như thế này, ghi nhật ký tất cả các hàng được chèn vào table

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

Với trình kích hoạt này, khi bạn thực hiện chèn hàng loạt trên bảng table , tableLog được lấp đầy với cùng một số hàng đã được chèn vào table

Đối với trình kích hoạt cụ thể của bạn, vì bạn cần gọi một thủ tục được lưu trữ cho mỗi hàng, bạn cần sử dụng con trỏ:

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

Tôi đã không thử nghiệm, nhưng sẽ hoạt động



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chèn dữ liệu tệp nhị phân vào trường SQL nhị phân bằng câu lệnh chèn đơn giản?

  2. MSSQL trong python 2.7

  3. Cách thay đổi thuộc tính của cột bằng tập lệnh sql

  4. Tìm bản ghi được chèn lần cuối MS SQL SERVER

  5. Cách nhận các hàng có tổng bằng giá trị đã cho