我正在尝试创建一个过程,其中条件语句根据用户输入的值进行更改。我想要实现的目标的简化示例如下。
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语句中的变量获取不正确的语法消息。
答案 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可以告诉你更多内容。