/ / WHERE क्लॉज में एक varchar स्थानीय चर का उपयोग करें - sql, sql-server

WHERE क्लॉज - sql, sql-server में एक varchar स्थानीय चर का उपयोग करें

मैं इस क्वेरी के लिए SQL सर्वर का उपयोग कर रहा हूँ ... मैं कई सेलेक्ट स्टेटमेंट बना रहा हूँ, जो WHERE क्लॉज़ के एक ही हिस्से का उपयोग करेगा। अब तक, मैंने व्हेयर क्लॉज में शामिल करने के लिए एक वॉच चर घोषित किया है, लेकिन मुझे एक त्रुटि प्राप्त हो रही है। यही मैंने अब तक कोशिश की है:

DECLARE @PersonalLoans varchar(500) = "code = ""RTR"" OR
code = ""RTL"" OR
code = ""LRV"" OR
code = ""LPV"" OR
code = ""LN"" OR
code = ""LFR"" OR
code = ""LCV"""

DECLARE @L01 int = 0
SELECT @L01 = ROUND(SUM(balance)*-1,2) FROM loan WHERE @PersonalLoans AND paydue > @databasedate
PRINT ""L01": " + CAST(@L01 AS varchar(15)) + ";"

मुझे WHERE क्लॉज में एक त्रुटि प्राप्त हो रही है: गैर-बूलियन प्रकार की अभिव्यक्ति एक संदर्भ में निर्दिष्ट है जहां एक स्थिति की उम्मीद है।

मैं कुछ अनुसंधान किया है और EXEC भर में आते हैंकार्य करें, लेकिन मुझे WHERE क्लॉज में "AND paydue> @databasedate" जोड़ने में सक्षम होना चाहिए। मुझे कई बार @PersonalLoans वैरिएबल का उपयोग करने की आवश्यकता होगी और पूरे क्वेरी में अलग-अलग और क्लॉज़ को जोड़ना होगा।

उत्तर:

जवाब के लिए 2 № 1

सामान्य तौर पर यह "बिना किसी चीज़ के" जैसा काम करता है EXECUTE या इसी के समान।

लेकिन आप यहाँ भाग्यशाली हैं ORs को सरल बनाया जा सकता है

code IN ("RTR",
"RTL",
"LRV",
"LPV",
"LN",
"LFR",
"LCV")

। यह इस प्रकार है कि आप एक तालिका चर का उपयोग कर सकते हैं जिसमें आप अपने कोड को धक्का देते हैं और इसे सूची के रूप में उपयोग करते हैं IN:

DECLARE @codes
TABLE (code varchar(3));
INSERT INTO @codes
VALUES ("RTR"),
("RTL"),
("LRV"),
("LPV"),
("LN"),
("LFR"),
("LCV");

DECLARE @L01 int = 0;
SELECT @L01 = round(sum(balance) * -1, 2)
FROM loan
WHERE paydue > @databasedate
AND code IN (SELECT code
FROM @codes);
PRINT ""L01": " + cast(@L01 AS varchar(15)) + ";";

इसलिए इसे आसानी से बढ़ाया जा सकता है (जो मुझे लगता है कि आपके दृष्टिकोण के पीछे कारण है) तालिका चर में अधिक कोड डालकर।


जवाब के लिए 0 № 2

आप डाल सकते हैं WHERE खंड जो आप एक चर में पुन: उपयोग करने का इरादा रखते हैं, तो अपने संयोजन के लिए गतिशील SQL निष्पादित करें WHERE किसी भी अतिरिक्त के साथ खंड खंड WHERE आपके पास स्थितियाँ (उदा। AND paydue > @databasedate)। कुछ इस तरह की कोशिश करो:

EXEC sp_executesql
"SELECT whatever " +
"FROM whoever " +
@WhereClause + -- Your @PersonalLoans variable(?)
"AND paydue > " + @databasedate