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

MASUKKAN NILAI YANG TIDAK ADA

Anda dapat melakukan ini menggunakan IF pernyataan:

IF NOT EXISTS 
    (   SELECT  1
        FROM    tblSoftwareTitles 
        WHERE   Softwarename = @SoftwareName 
        AND     SoftwareSystemType = @Softwaretype
    )
    BEGIN
        INSERT tblSoftwareTitles (SoftwareName, SoftwareSystemType) 
        VALUES (@SoftwareName, @SoftwareType) 
    END;

Anda bisa melakukannya tanpa IF menggunakan SELECT

INSERT  tblSoftwareTitles (SoftwareName, SoftwareSystemType) 
SELECT  @SoftwareName,@SoftwareType
WHERE   NOT EXISTS 
        (   SELECT  1
            FROM    tblSoftwareTitles 
            WHERE   Softwarename = @SoftwareName 
            AND     SoftwareSystemType = @Softwaretype
        );

Kedua metode rentan terhadap kondisi balapan, jadi sementara saya masih akan menggunakan salah satu di atas untuk menyisipkan, tetapi Anda dapat melindungi sisipan duplikat dengan batasan unik:

CREATE UNIQUE NONCLUSTERED INDEX UQ_tblSoftwareTitles_Softwarename_SoftwareSystemType
    ON tblSoftwareTitles (SoftwareName, SoftwareSystemType);

Contoh pada SQL-Fiddle

TAMBAHKAN

Di SQL Server 2008 atau yang lebih baru, Anda dapat menggunakan MERGE dengan HOLDLOCK untuk menghilangkan kemungkinan kondisi balapan (yang masih bukan pengganti batasan unik).

MERGE tblSoftwareTitles WITH (HOLDLOCK) AS t
USING (VALUES (@SoftwareName, @SoftwareType)) AS s (SoftwareName, SoftwareSystemType) 
    ON s.Softwarename = t.SoftwareName 
    AND s.SoftwareSystemType = t.SoftwareSystemType
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (SoftwareName, SoftwareSystemType) 
    VALUES (s.SoftwareName, s.SoftwareSystemType);

Contoh Penggabungan pada 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. Eskalasi Kunci SQL Server

  2. SQL Server memblokir akses ke prosedur 'sys.sp_OACreate' dari komponen 'Ole Automation Procedures'

  3. Studio Manajemen SQL Server (SSMS)

  4. Sintaks salah di dekat 'GO'

  5. Cara Memetakan Banyak Partisi ke Satu Filegroup di SQL Server (T-SQL)