我在两个数据库中有两个表。我需要在数据库中设置一个标志,其中行存在于数据库b中
我正在考虑使用SSIS包并将b存储在全局临时表中,然后使用该全局临时表设置a中的标志。
这个范围可能吗?
以下是我的疑问。两者都处于不同的任务中。
数据库b到全局临时表
SELECT [FirstName]
,[LastName]
INTO ##TempWatchList
FROM [TblWatchList]
基于全局临时表
SELECT [FirstName]
,[LastName]
,[WatchFlag]
FROM [Patient]
WHERE ([FirstName], [LastName]) IN
(
SELECT [FirstName], [LastName]
FROM ##TempWatchList
)
我已经尝试过并收到以下错误
"在预期条件的上下文中指定的非布尔类型的表达式,接近''。"。可能的失败原因:查询问题," ResultSet"属性设置不正确,参数设置不正确或连接未正确建立。
我还将全局临时表的名称更改为无效的名称并得到了相同的错误。 如果除了创建一个新表之外,我还能做什么其他工作范围?
答案 0 :(得分:1)
您实际上看到的错误与您的临时表无关 - 尝试使用IN
运算符使用两个不同的列。要获得此功能,您必须在WHERE子句和IN子句中连接两个值,如下所示:
SELECT [FirstName]
,[LastName]
,[WatchFlag]
FROM [Patient]
WHERE ([FirstName]+ '|' + [LastName]) IN
(
SELECT [FirstName]+ '|' + [LastName]
FROM ##TempWatchList
)
编辑:如果连接不适合您,请尝试this question下建议的一些解决方案。
基于此,最高性能的选项将是MrDenny提出的选项,如下所示:
SELECT [FirstName]
,[LastName]
,[WatchFlag]
FROM [Patient]
WHERE EXISTS
(
SELECT *
FROM ##TempWatchList wl
WHERE
wl.FirstName = Patient.FirstName AND
wl.LastName = Patient.LastName
)
答案 1 :(得分:0)
试试这个..你不能使用这个WHERE (column1, column2) IN (col1,col2)
而是必须使用AND运算符where column1 = col1 and column2 = col2
SELECT [FirstName],
[LastName],
[WatchFlag]
FROM [Patient]
WHERE [FirstName] IN (SELECT [FirstName]
FROM ##TempWatchList)
AND [LastName] IN (SELECT [LastName]
FROM ##TempWatchList)