【问题标题】:writing an Dynamic query in sqlserver在 sql server 中编写动态查询
【发布时间】:2010-03-30 07:25:31
【问题描述】:

声明@sqlCommand varchar(1000) 声明 @columnList varchar(75) 声明@city varchar(75) 声明@region varchar(75) SET @columnList = '名字,姓氏,城市' SET @city = '''伦敦''' SET @region = '''南''' SET @sqlCommand = 'SELECT' + @columnList +' FROM dbo.employee WHERE City = ' + @city 和 'region = '+@region --and 'region = '+@region 打印(@sqlCommand) 执行(@sqlCommand)

当我运行这个命令时,我得到一个错误

消息 156,级别 15,状态 1,第 8 行 关键字“and”附近的语法不正确。

非常感谢您的帮助

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    'and' 必须在单引号下

    @sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = ' +  @city  + 'and region = '  + @region 
    

    【讨论】:

      【解决方案2】:

      所有使用动态 SQL 的人必读http://www.sommarskog.se/dynamic_sql.html

      【讨论】:

        【解决方案3】:

        我建议使用参数化 SQL 来帮助防止 sql 注入,并支持执行计划重用。因此,假设 @columnList 已经过充分验证,因此保证不包含任何可疑的内容:

        DECLARE @sqlCommand nvarchar(1000)
        DECLARE @columnList varchar(75)
        DECLARE @city varchar(75)
        DECLARE @region varchar(75)
        SET @columnList = 'first_name, last_name, city'
        SET @city = 'London'
        SET @region = 'South'
        SET @sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = @city AND region = @region'
        print(@sqlCommand)
        
        EXEC sp_executesql @sqlCommand, N'@city varchar(75), @region varchar(75)', @city, @region
        

        我假设您的情况并不完全像概述的那样,否则最好不要使用动态 sql。

        【讨论】:

          【解决方案4】:

          尝试用以下代码替换您的 SET @sqlCommand 代码:

          SET @sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = ' + @city  + ' and  region = '+@region 
          

          【讨论】:

            猜你喜欢
            • 2011-04-01
            • 1970-01-01
            • 2021-06-16
            • 1970-01-01
            • 1970-01-01
            • 2010-09-20
            • 2017-01-11
            • 2017-12-12
            • 1970-01-01
            相关资源
            最近更新 更多