Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
如何两两同时应用Microsoft SQL IN运算符?_Sql_Sql Server - Fatal编程技术网

如何两两同时应用Microsoft SQL IN运算符?

如何两两同时应用Microsoft SQL IN运算符?,sql,sql-server,Sql,Sql Server,我在Microsoft SQL中有一个名为Account的表 Name AccountNumber IDNumber Alpha 1 Z Bravo 2 Y Charlie 3 X Delta 4 W Echo 5 W <---- Echo has same IDNumber as Delta. This i

我在Microsoft SQL中有一个名为Account的表

Name    AccountNumber    IDNumber
Alpha   1                Z
Bravo   2                Y
Charlie 3                X
Delta   4                W
Echo    5                W   <---- Echo has same IDNumber as Delta. This is allowed.
这将正确返回帐户

SELECT * FROM #Account
WHERE AccountNumber IN ('2','4','1') AND IDNumber IN ('Y','W','X')


Name    AccountNumber   IDNumber
Bravo   2   Y
Delta   4   W
但这是不正确的

SELECT * FROM #Account
WHERE AccountNumber IN ('4','5') AND IDNumber IN ('W','X')


Name    AccountNumber   IDNumber
Delta   4   W
Echo    5   W
我需要4-W配对和5-X配对

我的目标是使用Linq从C实现这一点。作为第一次尝试,我想看看这在SQL中是否可行。

使用值生成列表,然后加入:


我们可以动态地使用它吗?与在Values.@T.kowshikYedida中使用select语句一样,要将行/列作为参数传递以在查询中使用,可以使用表值参数、JSON或XML。如果我没有错,我们可以使用字符串连接。从表中选择*从表中选择concatAccountNumber,从表中选择concatAccountNumber中的IDnumber,从对中选择IDnumber。我不知道使用它是否有任何缺点。另外,我们可以使用where exists和表。好吧,若您需要知道它在SQL中是否可行,那个么就不要要求使用LINQ/EF核心。因为可以肯定的是,这在SQL中是可能的,但像current EF Core这样的ORMs/LINQ转换器就不是这种情况,它无法转换/传递/执行与内存中非原语(即单个值)集合的连接。因此,请删除linq和entity framework核心标记,并查看/接受Sql Server专家的说法。但如果您动态构建原始SQL,它将不会帮助您在EF核心异常中实现它
SELECT * FROM #Account
WHERE AccountNumber IN ('2','4','1') AND IDNumber IN ('Y','W','X')


Name    AccountNumber   IDNumber
Bravo   2   Y
Delta   4   W
SELECT * FROM #Account
WHERE AccountNumber IN ('4','5') AND IDNumber IN ('W','X')


Name    AccountNumber   IDNumber
Delta   4   W
Echo    5   W
SELECT a.*
FROM #Account a JOIN
     (VALUES ('2', 'Y'), ('4', 'W'), ('1', 'X')
     ) v(AccountNumber, IDNumber)
     ON a.AccountNumber = v.AccountNumber AND
        a.IDNumber = v.IDNumber;