Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/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 跨不同数据库SSI的全局临时表_Sql_Ssis - Fatal编程技术网

Sql 跨不同数据库SSI的全局临时表

Sql 跨不同数据库SSI的全局临时表,sql,ssis,Sql,Ssis,我有两个数据库中的两个表。我需要在数据库a中设置一个标志,其中该行存在于数据库b中。 我在考虑使用SSIS包并将b存储在全局临时表中,然后使用该全局临时表在a中设置标志。 这种范围界定可能吗 以下是我的疑问。两人的任务不同。 数据库b到全局临时表 从基于全局临时表的 我已经试过了,但出现了以下错误 在预期条件的上下文中指定的非布尔型表达式,靠近“,”。。可能的失败原因:查询问题、ResultSet属性设置不正确、参数设置不正确或连接建立不正确 我还将全局临时表的名称更改为无效名称,并得到了相同的

我有两个数据库中的两个表。我需要在数据库a中设置一个标志,其中该行存在于数据库b中。 我在考虑使用SSIS包并将b存储在全局临时表中,然后使用该全局临时表在a中设置标志。 这种范围界定可能吗

以下是我的疑问。两人的任务不同。 数据库b到全局临时表

从基于全局临时表的

我已经试过了,但出现了以下错误

在预期条件的上下文中指定的非布尔型表达式,靠近“,”。。可能的失败原因:查询问题、ResultSet属性设置不正确、参数设置不正确或连接建立不正确

我还将全局临时表的名称更改为无效名称,并得到了相同的错误。
如果这一级别的范围界定不起作用,除了创建一个新表,我还能做什么呢?

试试这个。。不能在col1、col2中使用此函数,而必须在column1=col1和column2=col2中使用AND运算符


实际上,您看到了一个与temp表无关的错误—尝试在IN运算符中使用两个不同的列。要获得此功能,必须将WHERE子句和in子句中的两个值连接起来,如下所示:

SELECT [FirstName]
      ,[LastName]
      ,[WatchFlag]
FROM [Patient]
WHERE ([FirstName]+ '|' + [LastName]) IN
(
    SELECT [FirstName]+ '|' + [LastName]
    FROM ##TempWatchList
)
编辑:如果连接不适合您,请尝试下面建议的一些解决方案

基于此,Denny先生提出的方案将是最有效的方案,如下所示:

SELECT [FirstName]
      ,[LastName]
      ,[WatchFlag]
FROM [Patient]
WHERE EXISTS 
  (
    SELECT *
    FROM ##TempWatchList wl
    WHERE 
        wl.FirstName = Patient.FirstName AND 
        wl.LastName = Patient.LastName
  )

单独查询这两个名称不会返回正确的值:如果在TempWatchList中,FirstName显示在记录321中,而LastName显示在记录986中,该怎么办?事实上,如果在TempWatchList的任何一行中都找到了所考虑的FirstName,则AND运算符会非常满意,只要在任何行中也找到了LastName,而该行可能与FirstName相同,也可能与FirstName不同。尝试了该操作后,得到的对象名称“TempWatchList”无效,因此我猜您不能跨不同的数据库使用全局临时表?实际上,这是一件好事-这意味着您已修复了一个错误,现在你可以做你认为你拥有的那个了。逐步完成向SSI添加临时变量的演练,并让我知道您是否能够使其工作。我已使其工作,但速度非常慢。我可以想象它来自于连接。我想没有别的办法了吧?我曾考虑在目标数据库中创建一个临时表,并使用该表来查询该表,但SSIS不允许我选择它。我已编辑以包含一个替代项,并链接到一个包含更多内容的问题。你是不是应该考虑制定一张真正的表格呢?将它放在临时表中有什么好处?它放在临时表中的唯一原因是数据不会永久存储在临时表中。它只需要在运行时设置标志。想一想,做一张永久桌要快得多。只是我无法控制那个数据库。我将尝试将连接的变量插入一个临时表中,看看结果如何。它有点慢,不像另一条路慢,但现在应该可以了。
SELECT [FirstName],
       [LastName],
       [WatchFlag]
FROM   [Patient]
WHERE  [FirstName] IN (SELECT [FirstName]
                       FROM   ##TempWatchList)
       AND [LastName] IN (SELECT [LastName]
                         FROM   ##TempWatchList) 
SELECT [FirstName]
      ,[LastName]
      ,[WatchFlag]
FROM [Patient]
WHERE ([FirstName]+ '|' + [LastName]) IN
(
    SELECT [FirstName]+ '|' + [LastName]
    FROM ##TempWatchList
)
SELECT [FirstName]
      ,[LastName]
      ,[WatchFlag]
FROM [Patient]
WHERE EXISTS 
  (
    SELECT *
    FROM ##TempWatchList wl
    WHERE 
        wl.FirstName = Patient.FirstName AND 
        wl.LastName = Patient.LastName
  )