根据另一个数据库的查询结果查询一个数据库

2024-04-22

我在 VS 2013 中使用 SSIS。 我需要从 1 个数据库获取 ID 列表,并使用该 ID 列表,我想查询另一个数据库,即SELECT ... from MySecondDB WHERE ID IN ({list of IDs from MyFirstDB}).


有 3 种方法可以实现此目的:

第一种方法 - 使用查找转换

首先你必须添加一个Lookup Transformation就像@TheEsisia 回答的那样,但还有更多要求:

  • 在 Lookup 中,您必须编写包含 ID 列表的查询(ex: SELECT ID From MyFirstDB WHERE ...)

  • 至少你必须从查找表中选择一列

  • 这些不会过滤行,但这会添加第二个表中的值

过滤行WHERE ID IN ({list of IDs from MyFirstDB})你必须在查找错误输出中做一些工作Error case有两种方法:

  1. 将错误处理设置为Ignore Row因此添加的列(来自查找)值将为 null ,因此您必须添加Conditional split过滤具有等于 NULL 值的行。

假设你已经选择了col1作为查找列,因此您必须使用类似的表达式

ISNULL([col1]) == False
  1. 或者您可以将错误处理设置为Redirect Row,因此所有行都会被发送到错误输出行,该行可能不会被使用,因此数据将被过滤

这种方法的缺点是所有数据在执行过程中都被加载和过滤。

此外,如果在所有数据加载到内存后在本地计算机上完成网络过滤(服务器上的第二种方法)。

第二种方法 - 使用脚本任务

为了避免加载所有数据,您可以采取一种解决方法,您可以使用脚本任务来实现此目的:(用VB.NET编写的答案)

假设连接管理器名称是TestAdo and "Select [ID] FROM dbo.MyTable"是获取 id 列表的查询,并且User::MyVariableList是要存储 id 列表的变量

注意:此代码将从连接管理器读取连接

    Public Sub Main()

        Dim lst As New Collections.Generic.List(Of String)


        Dim myADONETConnection As SqlClient.SqlConnection  
    myADONETConnection = _  
        DirectCast(Dts.Connections("TestAdo").AcquireConnection(Dts.Transaction), _  
        SqlClient.SqlConnection)

        If myADONETConnection.State = ConnectionState.Closed Then
        myADONETConnection.Open()
        End If

        Dim myADONETCommand As New SqlClient.SqlCommand("Select [ID] FROM dbo.MyTable", myADONETConnection)

        Dim dr As SqlClient.SqlDataReader

        dr = myADONETCommand.ExecuteReader

        While dr.Read

            lst.Add(dr(0).ToString)

        End While


        Dts.Variables.Item("User::MyVariableList").Value = "SELECT ... FROM ... WHERE ID IN(" &  String.Join(",", lst) & ")"

        Dts.TaskResult = ScriptResults.Success
    End Sub

And the User::MyVariableList应该用作源(变量中的Sql命令)

第三种方法 - 使用执行 Sql 任务

与第二种方法类似,但这将使用Execute SQL Task然后将整个查询用作OLEDB Source,

  1. 只需在 DataFlow 任务之前添加一个执行 SQL 任务即可
  2. Set ResultSet财产给single
  3. Select User::MyVariableList作为结果集
  4. 使用以下 SQL 命令

    DECLARE @str AS VARCHAR(4000)
    
    SET @str = ''
    
    SELECT @str = @str + CAST([ID] AS VARCHAR(255)) + ','
    FROM dbo.MyTable 
    
    SET @str = 'SELECT * FROM  MySecondDB WHERE ID IN (' + SUBSTRING(@str,1,LEN(@str) - 1) + ')'
    
    SELECT @str
    

如果列具有字符串数据类型,您应该在值之前和之后添加引号,如下所示:

SELECT @str = @str + '''' + CAST([ID] AS VARCHAR(255)) + ''','
    FROM dbo.MyTable

确保您已设置DataFlow Task Delay Validation财产给True

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据另一个数据库的查询结果查询一个数据库 的相关文章

  • 如何在Oracle数据库11g中创建新模式/新用户?

    我已经申请了一家公司的实习机会 作为一个问题 他们要求我为他们的公司创建一个具有一定要求的架构 并将DDL文件 我已经安装了 Oracle 数据库 11g Express 版本 但如何在 Oracle 数据库 11g 中创建新架构 我在网上
  • 无法使用 django-mssql 提供程序

    有谁知道如何使用 django mssql 提供程序 我已经安装了要求 但无法让它工作 如果 settings py 中没有 sqlserver ado 它可以正常导入 testenv C Users Robin test gt pytho
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • SSIS - 将参数传递给 ADO .NET 源查询

    我知道早些时候已经有人问过这个问题 大多数答案都不相关 谷歌了一下 显示解决办法是在 数据流任务 中配置表达式并设置查询 然而 在 ADO NET 源中 当我尝试预览输出时 我不断收到 Must declare the variable 它
  • Oracle 查询向上或向下舍入到最近的 15 分钟间隔

    08 SEP 20 08 55 05 08 SEP 20 15 36 13 下面的查询对于 15 36 13 可以正常工作 因为它四舍五入到 15 30 但 8 55 05 向下舍入到 08 45 而它应该四舍五入到 09 00 selec
  • 列的 SQL MAX(包括其主键)

    Short 从下面的 sql select 中 我获取了 cart id 和该购物车中最高价值商品的值 SELECT CartItems cart id MAX ItemValues value FROM CartItems INNER J
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • 如何将存储过程中的值返回到 EF

    我试图通过 EF 调用存储过程并从存储过程中检索返回值 我用过this https stackoverflow com questions 6861737 executesqlcommand with output parameter an
  • Linq 到自定义 SQL

    好的 我有一个带有巨大表的数据库 超过 100 万条记录和 50 多个列 我知道它不是最佳的 但它是我必须处理的 所以我需要运行限制返回数据量的查询 现在我的问题是这样的 我有一些运行并返回数据的自定义查询 用户可以通过选择将生成谓词模板并
  • 别名 .\SQLEXPRESS 为 (LocalDB)\MSSQLLocalDB

    I have SQLEXPRESS已安装 但代码假设我有一个名为 LocalDB MSSQLLocalDB 如何创建别名以便不必安装SQLLocalDb 启动 Sql Server 配置管理器 使用以下参数为 64 位 SQL Native
  • 如何:使用 SQL Server 2008 创建自动更新修改日期的触发器

    很高兴知道如何创建一个自动更新的触发器modifiedDate我的 SQL Server 表中的列 Table 时间输入 Id PK UserId FK Description Time GenDate ModDate 触发代码 TR Ti
  • 光标返回错误值 - sqlite - Android

    我正在开发一个短信应用程序 我正在尝试从每次对话中获取最后一条短信 这是我的 SQL 语句 SELECT MAX smsTIMESTAMP AS smsTIMESTAMP id smsID smsCONID smsMSG smsNUM sm
  • 如何将特定行保留为查询(T-SQL)的第一个结果?

    我正在编写一个 SQL 查询来获取 Report Builder 3 0 中报表的参数列表 我需要在结果中添加一个带有值 All 的额外行 如下所示 SELECT All UNION SELECT DISTINCT Manager FROM
  • MySQL 过去 12 个月的月度销售情况,包括没有销售的月份

    SELECT DATE FORMAT date b AS month SUM total price as total FROM cart WHERE date lt NOW and date gt Date add Now interva
  • 在 BEFORE INSERT 触发器中使用 IF EXISTS (SELECT ...) (Oracle)

    我的代码不起作用 Oracle 告诉我创建触发器时出现构建错误 显然我无法获得有关构建错误的更准确信息 我以前确实没有做过很多SQL 所以我对语法不太熟悉 我有一种预感 Oracle 不喜欢我的 IF EXISTS SELECT THEN
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • Django 模型 - 外键作为主键

    我有以下2张表 在 models py 中 class Foo models Model uuid models CharField UUID primary key True default uuid4 and class FooExt
  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra
  • SQL 查询Where Column = '' 返回表情符号字符

    好的 我有一个包含三列的表 Id Key Value 我想删除所有行Value是空的 因此 我在删除之前编写了要选择的查询 Select from Imaging ImageTag where Value 到目前为止一切都很标准 现在这是奇

随机推荐

  • 如何将这些数据存储在cookies中?

    假设我有一些文本框 文本区域 其中的值必须存储 这些值必须在按键时存储 以便当用户过早关闭页面时不会丢失数据 这是我当前的代码 使用cookie function createCookie name value days if days v
  • 箭头呢?

    阅读有关 Haskell 各种类别主题课程的各种教程 我们发现诸如Monoid Functor Monad等等 所有这些都有数十个实例 但由于某种原因 当我们到达Arrow 只有两个实例 函数和 monad 在这两种情况下 使用Arrow与
  • 如何使用 Go 的 flag 包打印位置参数的用法?

    鉴于这个简单的 Go 程序只需要一个命令行参数 我该如何改进它以便flag Usage 给出有用的输出 package main import flag fmt os func main flag Parse if len flag Arg
  • Python中不可变对象的类型是什么(对于mypy)

    我总是用mypy in my Python程式 类型是什么 来自typing 对于不可变对象 那些可以用作字典键的对象 回到上下文中 我想编写一个从字典继承的类 并且我有以下代码 class SliceableDict dict def g
  • Pthreads 与 OpenMP

    我正在使用 Linux 用 C 创建一个多线程应用程序 我不确定是否应该使用 POSIX 线程 API 还是 OpenMP API 使用两者有何优缺点 Edit 有人可以澄清这两个 API 是否创建内核级 or 用户级线程 Pthreads
  • 获取特定时区的当前时间

    我有一个具有不同时区的日期和时间格式的数据框 我想将其与该时区的当前时间进行比较 所以我想在下面的 日期和时间 列中添加 1 小时 然后将其与该时区的当前时间进行比较 就像第一个一样 时区是 EDT 当前时间是 2017 07 18 10
  • Java 枚举和 Switch 语句 - 默认情况?

    对于建议抛出异常的人 抛出异常不会给我带来编译时错误 它会给我带来运行时错误 我知道我可以抛出异常 我宁愿在编译期间死也不愿在运行时死 首先 我使用的是 eclipse 3 4 我有一个数据模型 其模式属性是枚举 enum Mode on
  • Windows 上的异步子进程

    首先 我要解决的总体问题比我在这里展示的要复杂一些 所以请不要告诉我 使用阻塞线程 因为如果没有公平 公平的重写 它就无法解决我的实际情况重构 我有几个不需要我修改的应用程序 它们从标准输入获取数据 并在发挥其魔力后将其输出到标准输出 我的
  • WordPress 树枝模板短代码不显示

    我在 Wordpress 中使用 Symfony Twig 模板 一切运行良好 除了我无法在页面模板中显示任何短代码 我正在尝试使用 Contact form 7 插件显示联系表单 短代码是这样的 contact form 7 id 123
  • 无法让 Karaf 4.2.6 使用 log4j2 和 JsonLayout 作为布局类型进行日志记录

    我一整天都在做这件事 但在尝试了这么多组合后却没有让它发挥作用 归根结底 我正在寻找从 Karaf 获取 JSON 日志记录的明确步骤列表 我什至浏览了 Maven Karaf 插件源代码 试图解决这个问题 尽管也许我看的还不够远 我正在使
  • 将特定选定的列提取到新的 DataFrame 作为副本

    我有一个包含 4 列的 pandas DataFrame 我想创建一个new数据框only有三列 这个问题类似于 从数据框中提取特定列 https stackoverflow com questions 10085806 extractin
  • 使用导航组件设置 BottomNavView 后,Jetpack Compose TopAppBar 闪烁

    使用 Jetpack Compose 应用程序进行工作BottomNavigationView和导航组件 我对活动内的底部栏进行了常规设置 val navHostFragment supportFragmentManager findFra
  • SQL Server 更新分组依据

    我尝试在 MS SQL 上执行此操作 但仅在 Group by line 处返回错误 update temp Set Dos Count 1 From Temp Table2010 s where Id s Total and s tota
  • 在 php 中上传文件大小 > 5MB 时出错?

    我上传的文件大小 gt 5MB 和配置php ini 但是当上传文件是结果时error File Error size ini 如何配置 还有另一个配置条目会影响此行为 post max size
  • Windows 服务恢复未重新启动服务

    我将 Windows 服务的恢复配置为在失败后延迟一分钟重新启动 但我从未真正重新启动服务 即使有最明显的错误 我确实在事件查看器中收到一条消息 无法在源 MyApp exe 中找到事件 ID 1 的描述 本地计算机可能没有必要的注册表信息
  • pip install ortools:没有匹配的发行版 - Alpine

    在 Docker 中 我尝试运行 pip install ortools 但找不到 其他 pip 安装包可以完美运行 我在 Dockerfile 中使用 FROM python 3 6 8 alpine bash 4 4 pip insta
  • 实体框架:获取存储库中的子类对象

    我有与下面列出的数据库表对应的以下模型 经理就是雇员 会计师也是雇员 让所有管理器都进入存储库的最佳方法是什么 如何实现GetAllManagers 方法 这是正确的TPT吗 CODE MyRepository MyEmployeeRepo
  • schema.org 产品可用性标签标记

    哪一个是正确的 span span 我检查了官方模式文档 并在示例中找到了所有这些 我想它们都可以 但目前有什么首选标准吗 Using span与content属性是invalid HTML5 和 Microdata 都不允许content
  • Amazon S3 静态网站不提供 css 或 js 文件

    我一直在尝试在 Amazon S3 上建立一个静态网站 我已经设置好使用我的个人域 到目前为止我已经能够很好地访问内容 所有链接都有效 无论是 根 目录中的页面还是子文件夹中的页面 因此 S3 似乎可以遵循我正在使用的路径 问题是没有任何
  • 根据另一个数据库的查询结果查询一个数据库

    我在 VS 2013 中使用 SSIS 我需要从 1 个数据库获取 ID 列表 并使用该 ID 列表 我想查询另一个数据库 即SELECT from MySecondDB WHERE ID IN list of IDs from MyFir