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

टी-एसक्यूएल स्थिति के सही नहीं होने पर भी यदि कथन का मूल्यांकन करता प्रतीत होता है

SQL सर्वर कथन को पार्स करता है और किसी भी सशर्त को अनदेखा करते हुए इसे मान्य करता है। यही कारण है कि निम्नलिखित भी विफल रहता है:

IF 1 = 1
BEGIN
  CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
  CREATE TABLE #foo(id INT);
END

चाहे आप निष्पादित करें या केवल पार्स करें, इसका परिणाम है:

SQL सर्वर नहीं जानता या परवाह नहीं करता है कि सशर्त की कौन सी शाखा दर्ज की जाएगी; यह वैसे भी एक बैच में सभी बयानों को मान्य करता है। आप (आस्थगित नाम समाधान के कारण) जैसे काम कर सकते हैं:

IF <something>
BEGIN
  SELECT foo FROM dbo.Table_That_Does_Not_Exist;
END

लेकिन आप ऐसा नहीं कर सकते:

IF <something>
BEGIN
  SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
END

समाधान, आमतौर पर, गतिशील SQL का उपयोग करना है:

IF <something>
BEGIN
  DECLARE @sql NVARCHAR(MAX);
  SET @sql = N'SELECT column_that_does_not_exist FROM dbo.Table_That_Does;';
  EXEC sp_executesql @sql;
END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में स्ट्रिंग और नल मानों को कैसे संयोजित करें

  2. एसक्यूएल सर्वर 2008 डेटाबेस के साथ vb.net या सी # डेस्कटॉप एप्लिकेशन में पावर द्वि रिपोर्ट और डैशबोर्ड एम्बेड करने का कोई तरीका है?

  3. एसक्यूएल में दो बिटमास्क की तुलना यह देखने के लिए कि क्या कोई बिट मेल खाता है

  4. नल और मेर्ज स्टेटमेंट:मुझे अनंत के लिए एक मान सेट करने की आवश्यकता है। कैसे?

  5. INSERT कथन विदेशी कुंजी बाधा के साथ विरोध करता है