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

Позоваване на друга колона в дефиницията DEFAULT в SQL Server 2005

Ето, демонстрирам това с примерна схема, тъй като не сте предоставили истинските си имена на таблици/колони.

Таблица:

CREATE TABLE test
  (
     id   INT NOT NULL PRIMARY KEY IDENTITY, --made up key
     col1 INT, --first column to add, wasn't sure if this was nullable or not
     col2 INT, --second column to add, wasn't sure if this was nullable or not
     col3 INT NOT NULL --this is the column to optionally insert into
  ) 

Ето дефиницията на тригера:

CREATE TRIGGER demo
ON test
INSTEAD OF INSERT
AS
    INSERT INTO test (col1,col2,col3)
    SELECT inserted.col1,
           inserted.col2,
           CASE
             WHEN inserted.col3 IS NULL THEN COALESCE(inserted.col1, 0) + COALESCE(inserted.col2, 0)
             ELSE inserted.col3
           END
    FROM   inserted

По принцип той замества всеки оператор за вмъкване, направен в таблицата, с този в тригера, така че проверявам с помощта на inserted временна таблица, за да видите дали стойността, която се опитва да бъде вмъкната в нашата незадължителна незадължителна колона, col3 , е NULL. Ако е, замествам го с добавяне на col1 и col2 (Обединявам с нула, тъй като не споменахте дали двете колони източник са nullable или не).

След това можете да стартирате изрази за вмъкване, които или го включват, или не, въпреки факта col3 не е nullable:

INSERT INTO test(col1,col2)
SELECT 12, 31
GO

INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO

Резултатите са:

ID  COL1 COL2 COL3
------------------  
1   12   31    43
2   1    2     89

Ако тригерът го нямаше, може да сте получили грешка при опит да изпълните първия оператор за вмъкване, който ви казва, че не може да вмъкне NULL в col3 .

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

Ето един работещ SQL Fiddle .




  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. Ред на инсталиране/деинсталиране на VS 2008 и SQL Server 2008

  3. Грешка JDBC на SQL Server на Java 8:Драйверът не можа да установи защитена връзка със SQL Server чрез използване на криптиране на Secure Sockets Layer (SSL)

  4. Извършете обединяване, ако съществува таблица с тези имена

  5. Име на файл за абонамент за SSRS с дата