【问题标题】:SSIS - check if database and tables exist, if not - run sql to createSSIS - 检查数据库和表是否存在,如果不存在 - 运行 sql 创建
【发布时间】:2015-07-17 02:26:05
【问题描述】:

我计划使用 SSIS 包将数据导入 Azure SQL 数据库。我知道我可以使用 OLEDB 源和目标来做到这一点,但我还想检查数据库和表是否存在,如果不存在 - 创建它们。我打算使用 Execute SQL 任务来创建数据库和表,但是如何首先检查它们是否已经存在?

所以如果数据库和表存在,我将运行数据流任务来传输数据,但如果它们不存在 - 运行执行 SQL 任务来创建数据库和表,然后运行数据流任务。

我怎样才能做到这一点?

【问题讨论】:

  • 您可以使用 ssdt 进行架构管理任务吗?您可以在执行过程任务中调用 sqlpackage.exe,它将部署不存在的任何内容。
  • 我可以在我的 SSIS 包中使用它吗?
  • 是的,任何进程都可以从执行进程任务中执行。我将在答案中发布更多详细信息

标签: ssis azure-sql-database


【解决方案1】:
  1. 创建一个 OLE DB 连接管理器到服务器和它的主数据库。在接下来的两个步骤中应用此连接管理器。
  2. 在一个容器中创建两个 SQL 任务。第一个 SQL 任务将检查数据库是否存在。您可以将数据库名称作为变量传递给它,并在 SQL 示例中应用它,如下所示。这 ”?”是数据库名称变量。

    如果不存在(SELECT * FROM sys.sysdatabases where name=?) -- 创建数据库

  3. 然后对于第二个 SQL 任务应用类似以下的内容,其中数据库和表名作为变量传递。但是,与之前的 SQL 不同的是,您可以应用表达式来定义 SQL。

    "IF OBJECT_ID(N'" + + "dbo." + + ", N'U') 为空 创建表 " + + "dbo." + + " ( 字段 1 VARCHAR(20) 非空 ,Field2 TINYINT NOT NULL );"

【讨论】:

    【解决方案2】:

    我对 Azure 或 SSIS 不是很熟悉,但在 SQL Server 中,您可以像这样检查对象是否存在:

    如果 OBJECT_ID('dbo.UserTable', 'U') 为 NULL -- 不存在。

    我希望这在某种程度上有所帮助。

    【讨论】:

    • 是的,我知道。这不是我的问题,我问的是 SSIS 实施
    • 在 SSIS 中,您可以创建一个 OLE DB 连接管理器,指向服务器和其上的主数据库。使用该连接管理器,应用上述 SQL 来搜索任何数据库。在全局变量中设置您的数据库名称并将该变量作为“?”传递给 SQL如下例所示:IF NOT Exists(Select * From sys.sysdatabases where name=?) .
    【解决方案3】:

    SSDT(数据库工具,而不是 SSDT-BI 产品套件)使用声明性模型来管理和部署数据库模式。你可以得到SSDThere

    创建新的 SQL Server 数据库项目后,您可以导入现有的数据库架构。在数据库属性中,您将目标数据库定义为 Azure。构建项目时,它会创建一个 dacpac 文件作为输出。此文件是包含数据库定义的存档。

    SSDT 附带一个名为 sqlpackage.exe 的实用程序,您可以了解 here。然后,您可以传入您的 dacpac 文件和目标服务器,并让实用程序“发布”数据库。如果数据库和模式匹配,它将什么也不做。如果它不存在,则将创建所有对象。如果模式与预期不同,它将根据项目中的定义方式更新模式。

    SSDT 有比这更多的好处,但对于您的情况,它将简化流程并使其更易于维护。

    顺便说一句,如果数据库不存在,您可能需要在包的其余部分中对连接管理器和任务进行延迟验证,以免验证失败。或者更好的是,创建一个主包,首先执行 sqlpackage 进程任务,然后将您的加载包调用为子包。

    【讨论】:

    • 我已经有了 SSDT,这就是我可以首先创建 SSIS 包的方法。
    • 这些名称不佳、用途完全不同的产品引起了很多混乱。 SSDT 用于数据库设计和测试。 SSDT-BI 用于创建 BI 项目:SSIS、SSRS、SSAS。您使用的是哪个版本的视觉工作室?我会给你一个直接链接
    • 我的解决方案实际上需要使用 SSIS。我真的不想转移到其他工具上
    • 这并不是避免使用 SSIS,SSIS 将通过协调任务和执行流程来实施您的解决方案。 SSDT 将处理数据库模式。为正确的工作使用正确的工具。
    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2011-05-16
    • 2016-02-15
    • 2016-11-05
    • 2011-01-14
    相关资源
    最近更新 更多