sql - SQL Where IN CLAUSE 变量
问题描述
我有一个过程,我基本上必须通过电子表格并在内部系统上按姓名/姓氏和出生日期逐个查找个人姓名,然后检索他们参加的设置。
我已经获得了对数据库的访问权限,并且我以前使用过 SQL,但没有什么广泛的经验。我为我的表设置了如下的虚拟名称,只是因为它可能包含敏感信息。
我想知道是否有更简单的方法可以做到这一点,我最终将通过 VBA 连接到数据库并以这种方式检索数据。我不知道我是否可以在 IN 子句中插入一个变量并创建一个自定义函数,该函数创建一个变量,该变量将返回类似“Bob”、“Keith”等内容,以便可以将其传递给 SQL(希望这是有道理的) )。另外,如果你通过 VBA 传递 SQL,你能传递缩写的表名吗?
另外我不确定是否有可能在正确的行上返回设置,或者最好在多个条件上使用一些查找函数?
这不是我知道的做事的好方法,但它是唯一的方法,因为每个人在我最初收到的数据中都没有唯一的标识符。
SELECT p.Forename
,p.Surname
,p.Birth_Date
,p.xxx
,p.xxx
,csc.name
,cs.name2
FROM dbo.Person AS P
INNER JOIN dbo.banana AS csc ON csc.xxx = p.xxx
INNER JOIN dbo.apple AS cs ON cs.xxx = p.xxx
WHERE p.forename IN('xxx', 'xxx', 'xxx', 'xxx')
AND p.surname IN('xx','xx','xx', 'xx')
AND p.Birth_Date IN(N'xx', N'xxx', N'xxx', N'xxx')
解决方案
根据您拥有的控制和访问权限,您可以使用 XML 传递值列表。
这是我的意思的一个例子:
DECLARE
@forenames xml = '<names><name>Bill</name><name>Steven</name><name>Steve</name></names>',
@surnames xml = '<names><name>Gates</name><name>Spielberg</name><name>Jobs</name></names>',
@birthdates xml = '<dates><date>10/28/1955</date><date>12/18/1946</date><date>02/24/1955</date></dates>';
SELECT
p.Forename
, p.Surname
, p.Birth_Date
, p.xxx
, p.xxx
, csc.name
, cs.name2
FROM dbo.Person AS P
INNER JOIN dbo.banana AS csc ON csc.xxx = p.xxx
INNER JOIN dbo.apple AS cs ON cs.xxx = p.xxx
WHERE
p.forename IN(
SELECT x.f.value( '.', 'varchar(50)' ) FROM @forenames.nodes( '//names/name' ) x( f )
)
AND p.surname IN(
SELECT x.f.value( '.', 'varchar(50)' ) FROM @surnames.nodes( '//names/name' ) x( f )
)
AND p.Birth_Date IN(
SELECT x.f.value( '.', 'varchar(50)' ) FROM @birthdates.nodes( '//dates/date' ) x( f )
);
推荐阅读
- angular - 在 SSR 应用程序中从 Firestore 获取数据时获取“app.firestore 不是函数”
- javascript - SweetAlert 模式窗口中的 Google reCaptcha
- mongodb - 无法在树莓派上安装 mongo 3.6
- ios - 故事板 - 对象内的对象作为 IBOutlet
- django - Python-django.db.migrations.exceptions.NodeNotFoundError
- mstest - MStest 中的 Textcontext 属性给出空引用异常
- javascript - Javascript 数学文本字段
- vba - 在 VBA 中将单元格的值写入另一个 Excel
- java - Android MediaRecorder Fragment 如何保持同一个实例
- angular - `sass` 在 css 中使用大括号时抛出错误