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

जहां में (आईडी की सरणी)

आप (दुर्भाग्य से) ऐसा नहीं कर सकते। एक Sql Parameter केवल एक ही मान हो सकता है, इसलिए आपको यह करना होगा:

WHERE buildingID IN (@buildingID1, @buildingID2, @buildingID3...)

बेशक, आपको यह जानना होगा कि वहां कितनी बिल्डिंग आईडी हैं, या गतिशील रूप से क्वेरी का निर्माण करना है।

समाधान* के रूप में, मैंने निम्न कार्य किया है:

WHERE buildingID IN (@buildingID)

command.CommandText = command.CommandText.Replace(
  "@buildingID", 
  string.Join(buildingIDs.Select(b => b.ToString()), ",")
);

जो कथन के टेक्स्ट को संख्याओं से बदल देगा, जो कुछ इस तरह समाप्त होगा:

WHERE buildingID IN (1,2,3,4)
  • ध्यान दें कि यह एक Sql इंजेक्शन भेद्यता के करीब हो रहा है, लेकिन चूंकि यह एक int सरणी सुरक्षित है। मनमाना तार नहीं हैं सुरक्षित है, लेकिन Sql कथनों को एक पूर्णांक (या डेटाटाइम, बूलियन, आदि) में एम्बेड करने का कोई तरीका नहीं है।


  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 सर्वर (T-SQL) में प्रत्येक विभाजन में पंक्तियों की संख्या वापस करने के 3 तरीके

  2. SQL सर्वर प्रबंधन स्टूडियो (SSMS) क्या है?

  3. JSON_QUERY () SQL सर्वर में उदाहरण (T-SQL)

  4. एक एसक्यूएल पंक्ति हैश?

  5. MySQL - तालिका बनाते समय एक साथ उपयोग किए जाने पर प्राथमिक कुंजी, अद्वितीय कुंजी और कुंजी का अर्थ