我真的认为这是一个简单的解决方法,但是我在Internet上找不到任何解决方案(至少我无法理解)。
我有这个存储过程:
ALTER PROC [dbo].[GetCard](
@Input varchar(50),
@Input2 varchar(50)
)
AS
SELECT * FROM Main WHERE @Input = @Input2;
但是我去的时候
GetCard 'CardName', 'Text';
SQL不太了解@Input
是一列。我必须改变什么?是否需要任何特殊的语法?
答案 0 :(得分:2)
像这样构建查询字符串(认为单引号正确),然后执行它:
SET @qString = 'SELECT * FROM MAIN WHERE ' + QuoteName(@Input) + ' = ''' + @Input2 + ''''
exec(@qString)
正如罗曼指出的那样,在使用动态SQL时要格外小心。阅读有关SQL注入的内容。
答案 1 :(得分:2)
最好按照 Andrew 或Roman Czerwinski的建议使用动态SQL。 但是,如果您不想使用动态SQL,则可以使用以下逻辑:
ALTER PROC [dbo].[GetCard](
@Input varchar(50),
@Input2 varchar(50)
)
AS
SELECT *
FROM Main
WHERE CardName = case when @Input = 'CardName' then @Input2 else CardName end
and OtherColumn = case when @Input = 'OtherColumn' then @Input2 else OtherColumn end
--etc...
答案 2 :(得分:0)
在代码示例中,没有名称为@ Input1的列,参数或变量。