如何将列名与其他参数一起传递

时间:2015-05-28 17:39:06

标签: mysql sql

我在SPROC之下,其中我传递列名(值)以及其他参数(Place,Scenario)。

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]'服务','首页','代理','123697'

我收到以下错误信息

无效的列名称'HOME'。 列名称“代理”无效。

我是否需要在sproc中添加任何东西?

3 个答案:

答案 0 :(得分:1)

首先:您将问题标记为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确保其有效。

QUOTENAME:

  

返回一个Unicode字符串,其中添加了分隔符,以使输入字符串成为有效的SQL Server分隔标识符。

答案 1 :(得分:0)

您需要使用"。

引用带有`(反引号)和字符串值的列名
set @SQLquery =  'SELECT `'  + @Value + '` from PDetail where Place = "' + @Place + '" and Scenario =  "' + @Scenario + '"  and Number = ' + @Number

答案 2 :(得分:0)

尝试使用预准备语句而不是连接字符串。

示例:

PREPARE stmt1 FROM 'SELECT ? from PDetail where Place = ? and Scenario = ? and Number = ?;
EXECUTE stmt1 USING @Value, @Place, @Scenario, @Number;