Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Referensi kolom lain dalam definisi DEFAULT di SQL Server 2005

Ini dia, saya mendemonstrasikan ini dengan skema contoh karena Anda belum memberikan nama tabel/kolom yang sebenarnya.

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
  ) 

Berikut adalah definisi pemicu:

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

Pada dasarnya ini menggantikan pernyataan penyisipan yang dilakukan di atas tabel dengan yang ada di pemicu, jadi saya memeriksa menggunakan inserted tabel sementara untuk melihat apakah nilai yang mencoba dimasukkan ke dalam kolom opsional non-nullable kami, col3 , adalah NULL. Jika ya, saya ganti dengan penambahan col1 dan col2 (Saya menggabungkan dengan nol karena Anda tidak menyebutkan apakah dua kolom sumber dapat dibatalkan atau tidak).

Anda kemudian dapat menjalankan pernyataan penyisipan yang menyertakannya atau tidak, meskipun sebenarnya col3 tidak dapat dibatalkan:

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

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

Hasilnya adalah:

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

Jika pemicunya tidak ada, Anda bisa mendapatkan kesalahan saat mencoba menjalankan pernyataan penyisipan pertama, memberi tahu Anda bahwa itu tidak dapat memasukkan NULL ke col3 .

Perhatikan juga bahwa pernyataan penyisipan kedua yang menentukan nilai belum diganti dengan penambahan, seperti yang diminta.

Inilah SQL Fiddle yang berfungsi .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membersihkan input dengan PHP dan driver sqlsrv?

  2. SQL:Bagaimana saya bisa mendapatkan nilai atribut dalam tipe data XML?

  3. Mentransposisi Baris ke dalam kolom di SQL Server 2005

  4. Cara membuat Pintasan Kustom di SQL Server Management Studio ( SSMS) - Tutorial SQL Server / TSQL Bagian 10

  5. Cara memuat file XML hierarkis yang besar (tapi sederhana) ke dalam tabel SQL