首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空作为参数无效

空作为参数无效
EN

Stack Overflow用户
提问于 2017-10-03 01:47:14
回答 2查看 195关注 0票数 0

我在where子句中使用两个参数。当我通过这两个参数时,它们会给我带来预期的结果。但是当我传递NULL时,它不起作用。

这是我想做的事情的一个例子。

代码语言:javascript
复制
CREATE TABLE #Teste (Par1 VARCHAR(20), Par2 VARCHAR(20), Par3 VARCHAR(20), Par4 VARCHAR(20))

INSERT INTO #Teste
SELECT 'Luciana', NULL, '123456', 'SP'
UNION
SELECT 'Henrique', 'Souza', NULL, 'RJ'
UNION
SELECT NULL, NULL, '768949', 'BA'
UNION
SELECT 'Luis', 'Alberto', '123456', NULL

DECLARE @Par1 VARCHAR(20) = 'Lu'
DECLARE @Par2 VARCHAR(20) = NULL
DECLARE @SQL NVARCHAR(MAX) = ''


SET @SQL = 

'SELECT * FROM #Teste WHERE (Par1 LIKE ''%' + @Par1 + '%'' OR @Par1 IS NULL) 
 OR (Par2 LIKE ''%' + @Par2 + '%'' OR @Par2 IS NULL)'

 EXEC sp_executesql @SQL, N'@Par1 VARCHAR(20), @Par2 VARCHAR(20)', @Par1, @Par2;

当我将'Souza‘作为@Par2 2传递时,它会返回3行。但是,当@Par2 2为NULL时,不会返回任何内容。它应该返回@Par1中的值。对吗?

EN

回答 2

Stack Overflow用户

发布于 2017-10-03 01:49:09

如果要使用参数,请保持一致:

代码语言:javascript
复制
SET @SQL = '
SELECT *
FROM #Teste
WHERE (Par1 LIKE ''%'' + @Par1 + ''%'' OR @Par1 IS NULL) OR
      (Par2 LIKE ''%'' + @Par2 + ''%'' OR @Par2 IS NULL)
'

EXEC sp_executesql @SQL,
     N'@Par1 VARCHAR(20), @Par2 VARCHAR(20)',
     @Par1, @Par2;

当您将@Par1@Par2设置为NULL时,生成的查询字符串是NULL --正如您定义的那样。

票数 3
EN

Stack Overflow用户

发布于 2017-10-03 09:28:22

通过做

代码语言:javascript
复制
DECLARE @Par2 VARCHAR(20) = NULL

整个@SQL变成NULL

代码语言:javascript
复制
    SET @SQL = 

'SELECT * FROM #Teste WHERE 1=1 ' 
+ CASE WHEN @Par1 IS NOT NULL AND @Par2 IS NOT NULL THEN
' AND (@Par1 LIKE ''%' + @Par1 + '%''' 
+  ' or @Par2 LIKE ''%' + @Par2 + '%'')' 
ELSE
+ CASE WHEN @Par1 IS NOT NULL THEN ' AND @Par1 LIKE ''%' + @Par1 + '%'''  ELSE '' END 
+ CASE WHEN @Par2 IS NOT NULL THEN ' AND @Par2 LIKE ''%' + @Par2 + '%'''  ELSE '' END 
end

EXEC sp_executesql @SQL,
 N'@Par1 VARCHAR(20), @Par2 VARCHAR(20)',
 @Par1, @Par2;

因为有了OR,您应该检查所有可能的方法

Par1Par2为空时,它不会添加到where子句中。

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

https://stackoverflow.com/questions/46536054

复制
相关文章

相似问题

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