sql >> Database teknologi >  >> RDS >> Sqlserver

Henvisning til en anden kolonne i DEFAULT definition i SQL Server 2005

Værsgo, jeg demonstrerer dette med et eksempelskema, da du ikke har angivet dine rigtige tabel-/kolonnenavne.

Tabel:

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
  ) 

Her er triggerdefinitionen:

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

Grundlæggende erstatter den enhver insert-sætning lavet på bordet med den i triggeren, så jeg tjekker ved at bruge inserted midlertidig tabel for at se, om værdien, der forsøger at blive indsat i vores valgfrie kolonne, der ikke kan nulstilles, col3 , er NULL. Hvis det er, erstatter jeg det med tilføjelsen af ​​col1 og col2 (Jeg smelter sammen med nul, da du ikke nævnte, om de to kildekolonner er nullbare eller ej).

Du kan derefter køre insert-sætninger, som enten inkluderer det eller ej, på trods af col3 er ikke nullbar:

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

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

Resultaterne er:

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

Hvis triggeren ikke var der, kunne du have fået en fejl ved at prøve at køre den første insert-sætning, der fortæller dig, at den ikke kunne indsætte NULL i col3 .

Bemærk også, at den anden insert-sætning, der angiver en værdi, ikke er blevet erstattet af tilføjelsen som anmodet.

Her er en fungerende SQL Fiddle .




  1. SYSDATE-funktion i Oracle

  2. Sådan øges den tilladte vedhæftede filstørrelse, når du sender e-mail i SQL Server (T-SQL)

  3. Får fejl:Kan ikke oprette forbindelse til nogen af ​​de angivne MySQL-værter. I et program, der ikke bruger MySQL

  4. De første tre grupper med de højeste karakterer skal have specifikke point 5,3, 1