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

标签 mysql sql

我有下面的 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/

相关文章:

使用日期和状态字段的mysql订购问题

Mysql基于不同Where子句的多重聚合函数

sql - 使用 SQL 在存储过程中搜索 Unicode 文本

mysql - 如何从 aws 实例读取 key 并添加到我的 mysql 查询中?

mysql - 高效地从 MySQL 查找日期范围

mysql - 从硬盘安全删除/删除 MySQL 数据

mysql - SQL - 检查列是否自动递增

php - SELECT....FOR UPDATE 实际上会延迟读取吗?

mysql - 如何在sql中让int>255

sql - 单表与联合双结构的性能