Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

जहां मौजूद नहीं है वहां मान डालें

आप इसे 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 पर मर्ज का उदाहरण



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आप Microsoft SQL सर्वर में अनुक्रम कैसे लागू करेंगे?

  2. पसंदीदा प्रदर्शन ट्यूनिंग ट्रिक्स

  3. SQL सर्वर में विदेशी कुंजी निर्भरता कैसे खोजें?

  4. मैं एक समुच्चय युक्त अभिव्यक्ति पर एक समग्र कार्य क्यों नहीं कर सकता, लेकिन मैं इसके चारों ओर एक नया चयन कथन बनाकर ऐसा कर सकता हूं?

  5. SQL सर्वर त्रुटि 7222:"इस उदाहरण पर केवल एक SQL सर्वर प्रदाता की अनुमति है"