我正在使用SQL服务器进行此查询...我将创建几个SELECT语句,它们将使用WHERE子句的相同部分。到目前为止,我已声明一个vachar变量包含在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函数,但我需要能够将“AND paydue> @databasedate”添加到WHERE子句中。我需要多次使用@PersonalLoans变量,并在整个查询中为它添加不同的AND子句。
答案 0 :(得分:2)
一般情况下,如果没有EXECUTE
或类似内容,
但你很幸运。这些多个OR
可以简化为
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)) + ';';
因此,通过在表变量中插入更多代码,可以轻松扩展(我猜这是你的方法背后的原因)。
答案 1 :(得分:0)
您可以将要在重载中重用的WHERE
子句放入,然后执行动态SQL以将WHERE
子句变量与您拥有的任何其他WHERE
条件组合(例如AND paydue > @databasedate
)。尝试这样的事情:
EXEC sp_executesql
'SELECT whatever ' +
'FROM whoever ' +
@WhereClause + -- Your @PersonalLoans variable(?)
'AND paydue > ' + @databasedate