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

SQL Server - след въвеждане на тригер - актуализиране на друга колона в същата таблица

Зависи от нивото на рекурсия за тригери, зададени в момента в DB.

Ако направите това:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

Или това:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

Този тригер по-горе няма да бъде извикан отново и ще бъдете в безопасност (освен ако не попаднете в някаква задънена улица; това може да е възможно, но може би греша).

И все пак не го правя мисля, че това е добра идея. По-добър вариант би бил използването на ВМЕСТО задействане . По този начин ще избегнете изпълнението на първата (ръчна) актуализация през DB. Ще бъде изпълнен само този, дефиниран вътре в тригера.

Тригер INSTEAD OF INSERT би бил така:

CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO part_numbers (
        colA,
        colB,
        part_description
    ) SELECT
        colA,
        colB,
        UPPER(part_description)
    ) FROM
        INSERTED
END
GO

Това автоматично ще "замени" оригиналния оператор INSERT с този, с изрично извикване UPPER, приложено към part_description поле.

Тригер ВМЕСТО АКТУАЛИЗИРАНЕ би бил подобен (и аз не ви съветвам да създавате един тригер, дръжте ги разделени).

Също така, това се отнася до коментара на @Martin:работи за многоредови вмъквания/актуализации (вашият пример не работи).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на изход за задаване на променлива в оператор за сливане

  2. SQL Server:Как да тествам дали даден низ има само цифрови знаци

  3. SQL заявка за намиране на редове само със специални знаци

  4. Не може да се свърже с SQL Server:Неуспешно влизане за потребител.

  5. 3 начина за изтриване на дублиращи се редове в SQL Server, като игнорирате първичния ключ