如何在条件语句中调用变量(即值列表)?

时间:2014-11-24 19:15:01

标签: sql sql-server

我正在尝试创建一个过程,其中条件语句根据用户输入的值进行更改。我想要实现的目标的简化示例如下。

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语句中的变量获取不正确的语法消息。

1 个答案:

答案 0 :(得分:1)

您需要为此使用动态SQL:

DECLARE @sql NVARCHAR(MAX)

SELECT @sql = 'SELECT year, SUM(loss)
FROM Database_1
WHERE id IN (SELECT DISTINCT id FROM Database_2 WHERE construction IN( ' + @construction_condition

EXEC sp_executesql @sql

正如Sean Lange所说,SQL注入可能会提到一些东西。在使用动态SQL实现解决方案之前,请确保您已了解危险。 Here is an overview,Google可以告诉你更多内容。