Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

CHÈN CÁC GIÁ TRỊ KHÔNG TỒN TẠI

Bạn có thể thực hiện việc này bằng cách sử dụng IF tuyên bố:

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

Bạn có thể làm điều đó mà không cần IF sử dụng SELECT

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

Cả hai phương pháp đều dễ bị ảnh hưởng bởi điều kiện chủng tộc, vì vậy mặc dù tôi vẫn sẽ sử dụng một trong các phương pháp trên để chèn, nhưng bạn có thể bảo vệ các lần chèn trùng lặp bằng một ràng buộc duy nhất:

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

Ví dụ trên SQL-Fiddle

BỔ SUNG

Trong SQL Server 2008 trở lên, bạn có thể sử dụng MERGE với HOLDLOCK để loại bỏ cơ hội của một điều kiện chủng tộc (vẫn không thể thay thế cho một ràng buộc duy nhất).

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);

Ví dụ về Hợp nhất trên 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. Chọn giá trị từ trường XML trong SQL Server 2008

  2. TAN () Ví dụ trong SQL Server

  3. SQL Server 2016:Luôn được mã hóa

  4. Microsoft SQL Server 2005/2008:Kiểu dữ liệu XML so với text / varchar

  5. Chèn 2 triệu hàng vào SQL Server nhanh chóng