我有下面的 SPROC,我在其中传递列名称(值)和其他参数(地点、场景)。
ALTER PROCEDURE [dbo].[up_GetValue]
@Value varchar(20), @Place varchar(10),@Scenario varchar(20), @Number varchar(10)
AS BEGIN
SET NOCOUNT ON;
DECLARE @SQLquery AS NVARCHAR(MAX)
set @SQLquery = 'SELECT ' + @Value + ' from PDetail where Place = ' + @Place + ' and Scenario = ' + @Scenario + ' and Number = ' + @Number
exec sp_executesql @SQLquery
END
GO
执行时:exec [dbo].[up_GetValue] 'Service', 'HOME', 'Agent', '123697'
我收到以下错误信息
列名“HOME”无效。 列名称“代理”无效。
我需要在存储过程中添加任何东西吗??
最佳答案
首先:您将问题标记为 mysql,但我认为您的代码是 MSSQL。
无论如何,您的问题是您需要在每个字符串值参数周围添加引号。
像这样:
alter PROCEDURE [dbo].[up_GetValue]
@Value varchar(20), @Place varchar(10),@Scenario varchar(20), @Number varchar(10)
AS BEGIN
SET NOCOUNT ON;
DECLARE @SQLquery AS NVARCHAR(MAX)
set @SQLquery = 'SELECT ' + QUOTENAME(@Value) + ' from PDetail where Place = ''' + @Place + ''' and Scenario = ''' + @Scenario + ''' and Number = ''' + @Number +''''
print @SQLquery
exec sp_executesql @SQLquery
END
GO
更新:
使用 QUOTENAME
确保它有效。
引用名:
Returns a Unicode string with the delimiters added to make the input string a valid SQL Server delimited identifier.
关于mysql - 如何将列名与其他参数一起传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30513499/