Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如果字符串为空,则使用T-SQL multiple WHERE子句_Sql Server_Tsql - Fatal编程技术网

Sql server 如果字符串为空,则使用T-SQL multiple WHERE子句

Sql server 如果字符串为空,则使用T-SQL multiple WHERE子句,sql-server,tsql,Sql Server,Tsql,我有三个字段要根据它们筛选查询。我想查询,即使1或2个字段是空的,也要传递一个空字符串。我可以算出一个字段,但一旦我加上另外两个字段,就不会得到任何结果。花括号是传递给查询的“我的表单”字段 IF '{Envelope Size}' <> '' SELECT Tools.ToolNo, Tools.[Name] FROM Tools LEFT JOIN ( SELECT AdditionalInfo.OwnerID, Addi

我有三个字段要根据它们筛选查询。我想查询,即使1或2个字段是空的,也要传递一个空字符串。我可以算出一个字段,但一旦我加上另外两个字段,就不会得到任何结果。花括号是传递给查询的“我的表单”字段

IF '{Envelope Size}' <> ''
SELECT Tools.ToolNo, 
       Tools.[Name]
FROM Tools
     LEFT JOIN
(
    SELECT AdditionalInfo.OwnerID, 
           AdditionalInfo.UserDefined3, 
           AdditionalInfo.UserDefined4, 
           AdditionalInfo.UserDefined5, 
           AdditionalInfo.UserDefined10, 
           AdditionalInfo.UserDefined24
    FROM AdditionalInfo
    WHERE AdditionalInfo.ModuleID = 35
) AS EnvStyle ON Tools.ToolID = EnvStyle.OwnerID
WHERE EnvStyle.UserDefined24 LIKE '{Envelope Size}';
ELSE
SELECT Tools.ToolNo, 
       Tools.[Name]
FROM Tools
     LEFT JOIN
(
    SELECT AdditionalInfo.OwnerID, 
           AdditionalInfo.UserDefined3, 
           AdditionalInfo.UserDefined4, 
           AdditionalInfo.UserDefined5, 
           AdditionalInfo.UserDefined12
    FROM AdditionalInfo
    WHERE AdditionalInfo.ModuleID = 35
) AS EnvStyle ON Tools.ToolID = EnvStyle.OwnerID
WHERE EnvStyle.UserDefined3 <> 'Stationery'
      AND EnvStyle.UserDefined4 = (CASE WHEN '{Env. Height}' = '' THEN 'NULL' ELSE '{Env. Height}' END)
      AND EnvStyle.UserDefined5 = (CASE WHEN '{Env. Width}' = '' THEN 'NULL' ELSE '{Env. Width}' END)
      AND EnvStyle.UserDefined12 = (CASE WHEN '{Flap Size}' = '' THEN 'NULL' ELSE '{Flap Size}' END);

我不太清楚您的数据结构是什么,大括号让我有点不舒服,但类似的东西可能适合您。当值为空时,您可以将筛选条件更改为使用或与大小写强制匹配。再一次,我不确定你的结构,下面只是你的例子,但希望这能让你走上正确的方向

IF '{Envelope Size}' <> ''
SELECT Tools.ToolNo, 
       Tools.[Name]
FROM Tools
     LEFT JOIN
(
    SELECT AdditionalInfo.OwnerID, 
           AdditionalInfo.UserDefined3, 
           AdditionalInfo.UserDefined4, 
           AdditionalInfo.UserDefined5, 
           AdditionalInfo.UserDefined10, 
           AdditionalInfo.UserDefined24
    FROM AdditionalInfo
    WHERE AdditionalInfo.ModuleID = 35
) AS EnvStyle ON Tools.ToolID = EnvStyle.OwnerID
WHERE EnvStyle.UserDefined24 LIKE '{Envelope Size}';
ELSE
SELECT Tools.ToolNo, 
       Tools.[Name]
FROM Tools
     LEFT JOIN
(
    SELECT AdditionalInfo.OwnerID, 
           AdditionalInfo.UserDefined3, 
           AdditionalInfo.UserDefined4, 
           AdditionalInfo.UserDefined5, 
           AdditionalInfo.UserDefined12
    FROM AdditionalInfo
    WHERE AdditionalInfo.ModuleID = 35
) AS EnvStyle ON Tools.ToolID = EnvStyle.OwnerID
WHERE EnvStyle.UserDefined3 <> 'Stationery'
      AND (EnvStyle.UserDefined4 = {Env.Height} 
            OR 1 = CASE WHEN {Env.Height} = '' THEN 1 ELSE 0 END)
      AND (EnvStyle.UserDefined5 = {Env.Width} 
            OR 1 = CASE WHEN {Env.Width} = '' THEN 1 ELSE 0 END)
      AND (EnvStyle.UserDefined12 = {Flap Size} 
            OR 1 = CASE WHEN {Flap Size} = '' THEN 1 ELSE 0 END);

当“{Env.Height}”=literal字符串“{Env.Height}”永远不会等于literal字符串时的大小写。谢谢@WAMLeslie这太完美了。它就像我想要的那样工作!我必须修复语法错误,但你不会知道的。花括号是从表单字段获取字符串的API。你能解释一下逻辑吗?这里有正确的语法。其中EnvStyle.UserDefined3'信纸''和EnvStyle.UserDefined4='{Env.Height}''或1=大小写当'{Env.Height}'=然后1 ELSE 0 END和EnvStyle.UserDefined5='{Env.Width}'或1=大小写当'{Env.Width}'=然后1 ELSE 0 END和EnvStyle.UserDefined12='{Flap Size}'或1=当{Flap Size}'为1时的情况,否则为0结束;对于这三个条件中的每一个,OR允许您在精确值相等的情况下进行匹配,或者在值为空的情况下,大小写强制执行始终为真的1=1条件。