Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 基于条件参数的查询?_Sql Server_Powerbi - Fatal编程技术网

Sql server 基于条件参数的查询?

Sql server 基于条件参数的查询?,sql-server,powerbi,Sql Server,Powerbi,我需要运行一个查询,根据必需和非必需的参数将客户端计算机信息从SQL Server拉入PowerBI 我已设置参数,但无法使SQL代码正常工作。我的两个参数是SelectClient1和SelectClient2。一些客户有多个名称,通常是首字母缩写,如Joe's Construction、Joe's Construction LLC和JCLLC。我需要把那些名字都带回来 选择* 从表1到表2 其中table1.InspectionId=table2.InspectionId 和所有者名称,如“

我需要运行一个查询,根据必需和非必需的参数将客户端计算机信息从SQL Server拉入PowerBI

我已设置参数,但无法使SQL代码正常工作。我的两个参数是SelectClient1和SelectClient2。一些客户有多个名称,通常是首字母缩写,如Joe's Construction、Joe's Construction LLC和JCLLC。我需要把那些名字都带回来

选择*
从表1到表2
其中table1.InspectionId=table2.InspectionId
和所有者名称,如“%”&SelectClient1&“%”
或类似“%”的所有者名称(&SelectClient2&“%”
我对上述代码的问题是,有时我会将SelectClient2留空。在这种情况下,我需要代码来工作,并且只在所有者类似于SelectClient1的地方返回

返回像这样的东西

InspectionID  Client                    Machine  Severity
1             "Joe's Construction LLC"  A        High
2             "Joe's Construction LLC"  B        Low
3             "Joe's Construction"      A        Low
4             "JCLLC"                   A        Medium
5             "JCLLC"                   B        Medium

您在这里很挣扎,因为谓词周围没有任何括号。如果您使用“现代”联接结构,那么这在查询中并不重要。下面是使用ANSI-92样式的联接和参数查询的结果。请注意,当您在这样的谓词中有前导通配符时,您已经使查询不可争论,并且没有索引将起到帮助作用

SELECT * 
FROM table1
join table2 on table1.InspectionId = table2.InspectionId 
WHERE OwnerName like '%' + @SelectClient1 + '%' 
    OR OwnerName like '%' + @SelectClient2 + '%'

您确实应该使用ANSI-92样式的联接。他们已经存在超过25年了。使用适当的
连接
。它已经存在超过25年了。不知道为什么会这样,但它确实。。。我现在唯一关心的是当我合并两个以上的表时如何应用它。在我的一些查询中,我合并了5或6个表。我不知道如何执行这些连接,除了我一直在做的古老方式,你只需添加更多连接。如果您所做的只是一个以逗号分隔的表列表,那么如何适应左连接或右连接?=和=语法自2008年以来已被删除。之所以这样做是因为你没有括号。您已经离开了join-in-where子句,但是接下来您需要“where t1.ID=t2.ID AND(所有者像‘blah’或所有者像‘bleh’)我从不需要执行左或右连接。从问题中您可能可以看出,我们的数据库管理非常糟糕,允许用户在字段中输入他们想要的任何内容。我必须连接的所有表都是标题表的段和子段;因此,始终需要使用来自两个ta的所有观察结果天哪,听起来确实很可怕。