首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL动态查询返回NULL

SQL动态查询返回NULL
EN

Stack Overflow用户
提问于 2021-05-28 03:08:31
回答 2查看 64关注 0票数 1

我正在尝试构建一个具有动态order by条件的动态查询。但是出于某种原因,即席查询可以正常工作,但使用with sp_executesql时也会返回null。如果查询有任何问题,请告知。下面是示例数据。

代码语言:javascript
复制
   create table resource_statistics (id int , parameter_name varchar(255), parameter_value INT) 
    
    INSERT INTO resource_statistics values (1,'temparature',28);
    INSERT INTO resource_statistics values (2,'humidity',67)
    INSERT INTO resource_statistics values (3,'wind',5)
    INSERT INTO resource_statistics values (4,'wind',28)
    INSERT INTO resource_statistics values (5,'humidity',90)
    INSERT INTO resource_statistics values (6,'humidity',45)
    INSERT INTO resource_statistics values (7,'temparature',38)

Below query returns the correct data set if ! switch the @tvalue with 0 and 1.

declare @test varchar(255)='parameter_name', @tvalue INT=0
select 
parameter_name,parameter_value
from
resource_statistics
ORDER BY 
CASE WHEN @test = 'parameter_name' THEN CASE @tvalue when '1' THEN   parameter_name ELSE NULL END END DESC

已尝试将上述查询转换为动态SQL,但执行结果为空。

代码语言:javascript
复制
declare @test varchar(255)='parameter_name', @tvalue INT=0,@sqlquery NVARCHAR(MAX)
SET @sqlquery='
select 
parameter_name,parameter_value
from
resource_statistics
ORDER BY ' +
CASE WHEN  @test  ='parameter_name' THEN CASE @tvalue  when '1' THEN   'parameter_name' ELSE NULL END END +' DESC'
select @sqlquery
execute sp_executesql @sqlquery
EN

回答 2

Stack Overflow用户

发布于 2021-05-28 03:47:26

不要使用else NULL。只需使用else ''即可

代码语言:javascript
复制
declare @test varchar(255) = 'parameter_name',
        @tvalue INT = 0,
        @sqlquery NVARCHAR(MAX);

SET @sqlquery = N'
select parameter_name, parameter_value
from resource_statistics
order by ' +
    (case when  @test = 'parameter_name' and @tvalue = '1' 
          then 'parameter_name'  + ' DESC' else '' end)
select @sqlquery;

execute sp_executesql @sqlquery;

您可能已经知道,将参数合并到这样的SQL查询中既有发生意外语法错误的风险,也有SQL注入的风险。但是,您得到的是NULL,因为如果任一操作数为NULL,则+返回NULL

票数 0
EN

Stack Overflow用户

发布于 2021-05-29 10:03:31

您的动态查询无法执行,因为它的格式不正确。我刚刚更正了形成动态语句的问题。

代码语言:javascript
复制
 declare @sqlquery NVARCHAR(MAX)
  SET @sqlquery='
  declare @test varchar(255)=''parameter_name'', @tvalue INT=0

   select 
    parameter_name,parameter_value
  from  resource_statistics
  ORDER BY 
    CASE WHEN  @test  =''parameter_name'' THEN CASE @tvalue  when ''1'' THEN   
              ''parameter_name'' ELSE NULL END END DESC'
   select @sqlquery
   execute sp_executesql @sqlquery

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67728502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档