我有一个接受@columnName
参数的SQL Server存储过程,我正在使用它来构建查询:
AND @columnName LIKE '%' + @userInput + '%'
如果我用静态值替换@columnName
,它就会起作用,比如:
AND userName LIKE '%' + @userInput + '%'
我相信这是因为@columnName
被视为字符串,因为当运行存储过程时,它被传递为字符串,如下所示:
EXEC app.findUsers 'UserName', 'sa'
是否可以在不使用动态查询字符串的情况下执行此操作?
您需要使用SQL Dynamic来完成此操作。
DECLARE @SQL VARCHAR(8000)
SET @SQL = 'SELECT Column FROM Table WHERE [' + @columnName + '] LIKE ''%' + @userInput + '%'''
PRINT @SQL
EXEC(@SQL)