Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

WSTAW WARTOŚCI, GDZIE NIE ISTNIEJĄ

Możesz to zrobić za pomocą IF oświadczenie:

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

Możesz to zrobić bez IF używając SELECT

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

Obie metody są podatne na sytuację wyścigu, więc chociaż nadal używałbym jednej z powyższych do wstawiania, możesz zabezpieczyć zduplikowane wstawki za pomocą unikalnego ograniczenia:

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

Przykład w SQL-Fiddle

UZUPEŁNIENIE

W SQL Server 2008 lub nowszym możesz użyć MERGE z HOLDLOCK aby wyeliminować możliwość wystąpienia sytuacji wyścigu (co nadal nie jest substytutem unikalnego ograniczenia).

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

Przykład scalania w 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. Ważna zmiana w Extended Events w SQL Server 2012

  2. EXISTS vs JOIN i użycie klauzuli EXISTS

  3. Zapytanie SQL, aby znaleźć ostatni dzień miesiąca

  4. Automatyczne usuwanie zapomnianych transakcji w MS SQL Server

  5. CAST i IsNumeric