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

SQL Server SAU KHI CHÈN kích hoạt không thấy hàng vừa chèn

Trình kích hoạt không thể sửa đổi dữ liệu đã thay đổi (Inserted hoặc Deleted ) nếu không, bạn có thể nhận được đệ quy vô hạn khi các thay đổi gọi lại kích hoạt. Một tùy chọn sẽ là để trình kích hoạt quay trở lại giao dịch.

Chỉnh sửa: Lý do cho điều này là tiêu chuẩn cho SQL là các hàng đã chèn và đã xóa không thể được trình kích hoạt sửa đổi. Lý do cơ bản là các sửa đổi có thể gây ra đệ quy vô hạn. Trong trường hợp chung, đánh giá này có thể liên quan đến nhiều trình kích hoạt trong một tầng đệ quy lẫn nhau. Việc có một hệ thống quyết định một cách thông minh việc cho phép các bản cập nhật như vậy là khó về mặt tính toán, về cơ bản là một biến thể của sự cố tạm dừng.

Giải pháp được chấp nhận cho điều này là không cho phép trình kích hoạt thay đổi dữ liệu đang thay đổi, mặc dù nó có thể khôi phục giao dịch.

create table Foo (
       FooID int
      ,SomeField varchar (10)
)
go

create trigger FooInsert
    on Foo after insert as
    begin
        delete inserted
         where isnumeric (SomeField) = 1
    end
go


Msg 286, Level 16, State 1, Procedure FooInsert, Line 5
The logical tables INSERTED and DELETED cannot be updated.

Một cái gì đó như thế này sẽ quay trở lại giao dịch.

create table Foo (
       FooID int
      ,SomeField varchar (10)
)
go

create trigger FooInsert
    on Foo for insert as
    if exists (
       select 1
         from inserted 
        where isnumeric (SomeField) = 1) begin
              rollback transaction
    end
go

insert Foo values (1, '1')

Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo bảng SQL từ tệp xls (Excel)

  2. Chu kỳ qua vòng bảng tạm trong SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 8

  3. Các phương pháp hay nhất về khôi phục sau thảm họa của Microsoft SQL Server

  4. SQL Server tương đương với kiểu dữ liệu MySQL enum?

  5. NHibernate.Spatial và Sql 2008 Loại địa lý - Cách cấu hình