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