sql >> Databáze >  >> RDS >> Sqlserver

Odkazování na jiný sloupec v definici DEFAULT v SQL Server 2005

Tady to máte, demonstruji to na příkladu schématu, protože jste neuvedli své skutečné názvy tabulek/sloupců.

Tabulka:

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
  ) 

Zde je definice spouštěče:

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

V podstatě nahradí jakýkoli příkaz vložení provedený v tabulce příkazem ve spouštěči, takže zkontroluji pomocí inserted dočasnou tabulku, abyste zjistili, zda se hodnota, kterou se pokoušíte vložit do našeho volitelného sloupce bez možnosti null, col3 , je NULL. Pokud je, nahradím ho přidáním col1 a col2 (Slučuji se s nulou, protože jste nezmínil, zda jsou dva zdrojové sloupce s možnou hodnotou null nebo ne).

Poté můžete spustit příkazy insert, které jej buď obsahují, nebo ne, navzdory skutečnosti col3 nemá hodnotu null:

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

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

Výsledky jsou:

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

Pokud tam spouštěč nebyl, mohli jste dostat chybu při pokusu o spuštění prvního příkazu vložení, který vám říká, že nelze vložit NULL do col3 .

Všimněte si také, že druhý příkaz insert, který určuje hodnotu, nebyl nahrazen přidáním, jak bylo požadováno.

Zde je funkční SQL Fiddle .




  1. levé vnější spojení s hodnotami null

  2. Co je nového v ProxySQL 2.0

  3. Získejte první řadu pro jednu skupinu

  4. C++ Program komunikující s MySQL databází