आप इसे IF
. का उपयोग करके कर सकते हैं कथन:
IF NOT EXISTS
( SELECT 1
FROM tblSoftwareTitles
WHERE Softwarename = @SoftwareName
AND SoftwareSystemType = @Softwaretype
)
BEGIN
INSERT tblSoftwareTitles (SoftwareName, SoftwareSystemType)
VALUES (@SoftwareName, @SoftwareType)
END;
आप इसे बिना IF
. के कर सकते हैं SELECT
. का उपयोग करके
INSERT tblSoftwareTitles (SoftwareName, SoftwareSystemType)
SELECT @SoftwareName,@SoftwareType
WHERE NOT EXISTS
( SELECT 1
FROM tblSoftwareTitles
WHERE Softwarename = @SoftwareName
AND SoftwareSystemType = @Softwaretype
);
दोनों विधियां दौड़ की स्थिति के लिए अतिसंवेदनशील हैं, इसलिए जब भी मैं उपरोक्त में से किसी एक को सम्मिलित करने के लिए उपयोग करता हूं, लेकिन आप एक अद्वितीय बाधा के साथ डुप्लिकेट प्रविष्टियों को सुरक्षित रख सकते हैं:
CREATE UNIQUE NONCLUSTERED INDEX UQ_tblSoftwareTitles_Softwarename_SoftwareSystemType
ON tblSoftwareTitles (SoftwareName, SoftwareSystemType);
SQL-Fiddle पर उदाहरण
अतिरिक्त
SQL Server 2008 या बाद के संस्करण में आप MERGE
. का उपयोग कर सकते हैं HOLDLOCK
के साथ दौड़ की स्थिति की संभावना को दूर करने के लिए (जो अभी भी एक अद्वितीय बाधा का विकल्प नहीं है)।
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);
SQL Fiddle पर मर्ज का उदाहरण