跨越不同数据库SSIS的全局临时表

时间:2014-10-20 19:10:12

标签: sql ssis

我在两个数据库中有两个表。我需要在数据库中设置一个标志,其中行存在于数据库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"属性设置不正确,参数设置不正确或连接未正确建立。

我还将全局临时表的名称更改为无效的名称并得到了相同的错误。 如果除了创建一个新表之外,我还能做什么其他工作范围?

2 个答案:

答案 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)