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