我正在尝试创建一个过程,其中条件语句根据用户输入的值进行更改。下面是我想要实现的简化示例。如何在条件语句中调用变量(即值列表)?
Create Procedure [LossRatioReport] (@construction AS VARCHAR(2), @state AS VARCHAR(2)) AS
DECLARE @construction_condition AS NVARCHAR(MAX)
DECLARE @construction AS VARCHAR(2)
SET @construction = '01'
SET @construction_condition = CASE @construction WHEN '01'
THEN @construction_condition = '('01', 'Frame Construction', 'Frame')'
ELSE @construction_condition = '00'
END
BEGIN
SELECT year, SUM(loss)
FROM Database_1
WHERE id IN (SELECT DISTINCT id FROM Database_2 WHERE construction = @construction_condition)
END
GO
我想这样做这种方式,因为有整数和字符串每种类型的列表,我不想一遍又一遍地重写代码为每个条件。但是当我尝试运行我的代码时,我不断收到WHERE语句中变量的错误语法消息。
你不能这样做,就像你正在尝试。有一件事你在你的案例表达式中遍布着无效的字符串。要做到这一点,你需要动态的SQL。我会非常不愿意这样做,因为你需要参数化你的动态sql,因为这是来自一个参数。似乎最好的方法是重新考虑这一点。 – 2014-11-24 19:23:57
您可以创建一个只存储ID的临时表。根据条件,使用您感兴趣的ID填充临时表,并在其中添加“where id in(从#tmp选择[ID])” – Jeremy 2014-11-24 19:44:55