Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

тригер и транзакции на временни таблици

Не мисля, че разбирате задействания - задействането на задействане е свързано с изявлението, с което са свързани, а не когато транзакцията се ангажира. Два скрипта:

Сценарий 1:

create table T1 (
    ID int not null,
    Val1 varchar(10) not null
)
go
create table T2 (
    ID int not null,
    Val2 varchar(10) not null
)
go
create trigger T_T1_I
on T1
after insert
as
    insert into T2 (ID,Val2) select ID,Val1 from inserted
go
begin transaction
insert into T1 (ID,Val1)
select 10,'abc'
go
RAISERROR('Run script 2 now',10,1) WITH NOWAIT
WAITFOR DELAY '00:01:00'
go
commit

Сценарий 2:

select * from T2 with (nolock)

Отворете две връзки към една и съща база данни, поставете по един скрипт във всяка връзка. Изпълнете скрипт 1. Когато покаже съобщението „Изпълнете скрипт 2 сега“, превключете към другата връзка. Ще видите, че сте в състояние да изберете необвързани данни от T2, въпреки че тези данни са вмъкнати от тригера. (Това също така предполага, че подходящи заключвания се държат на T2 от скрипт 1, докато тригерът се ангажира).

Тъй като това означава, че еквивалентът на това, което искате, е просто да вмъкнете в основната таблица и да задържите транзакцията си отворена, можете да направите това.

Ако искате да скриете действителната форма на таблицата от потребителите, създайте изглед и напишете тригери върху това, за да актуализирате базовите таблици. Както беше посочено по-горе обаче, веднага щом извършите DML операция срещу изгледа, тригерите ще са се задействали и ще държите ключалки срещу основната таблица. В зависимост от нивото на изолация на транзакцията на други връзки, те може да видят вашите промени или да бъдат блокирани, докато транзакцията не се ангажира.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да проверя данните преди вмъкване/актуализация с SQL Server?

  2. GRANT EXECUTE на всички съхранени процедури

  3. SQL Server CLR:как да извикате WCF услуга В CLR SQL съхранена процедура в проект на база данни

  4. T-SQL - ИЗБЕРЕТЕ по най-близката дата и ГРУПИРАНЕ ПО ID

  5. Сортиране на данни за източник на PIVOT