📜  MS SQL Server-集成服务(1)

📅  最后修改于: 2023-12-03 15:32:59.424000             🧑  作者: Mango

MS SQL Server 集成服务

简介

MS SQL Server 集成服务是基于 Microsoft SQL Server 数据库引擎的扩展性框架。它提供了一组内置的任务和转换器,可以用来创建和执行 ETL(抽取、转换和加载)工作流程。

集成服务包括三个主要组件:

  • Integration Services 范本库:包含一组预定义的 ETL 范本,可以作为起点来帮助你构建你自己的工作流程。

  • 集成服务设计程序:使用这个程序来创建、管理和运行集成服务的工作流程。这个设计程序提供了一个基于图形用户界面的环境来创建工作流程,同时也提供了一个基于 XML 的格式来表示工作流程。

  • 集成运行时:这是集成服务的执行引擎。在执行过程中,它负责处理工作流程中的任务和转换器,并将结果发送到 SQL Server 数据库中。

优点和用途

MS SQL Server 集成服务的优点和用途包括:

  • 成熟的 ETL 技术:集成服务提供了一组高度可靠的任务和转换器,可以帮助你轻松构建 ETL 工作流程,方便地处理数据集成问题。

  • 基于图形用户界面的设计环境:设计程序使用直观的界面来帮助你构建和管理工作流程,不需要编写代码。

  • 高度可扩展:集成服务包括许多内置的任务和转换器,但你也可以创建自己的自定义组件,以满足特定的需求。

  • 与 SQL Server 数据库无缝集成:集成服务使用 SQL Server 数据库作为其关键的存储库,并能够与其他 SQL Server 组件(如 Reporting Services)进行平滑协作。

  • 适合大数据量处理:当数据量很大时,使用集成服务通常比使用传统的数据库查询更高效。

示例代码

以下是使用 MS SQL Server 集成服务来执行 ETL 工作流程的示例代码:

-- 创建一个新的 Integration Services 包
DECLARE @folderName VARCHAR(50) = 'MyISFolder'
DECLARE @projectName VARCHAR(50) = 'MyISProject'
DECLARE @packageName VARCHAR(50) = 'MyISPackage'
DECLARE @description VARCHAR(255) = 'This package executes my ETL workflow'

EXEC [SSISDB].[catalog].[create_folder] @folder_name=@folderName, @folder_id=@folderName OUTPUT
DECLARE @folder_id BIGINT = (SELECT folder_id FROM [SSISDB].[catalog].[folders] WHERE folder_name=@folderName)

EXEC [SSISDB].[catalog].[create_project] @folder_name=@folderName, @project_name=@projectName, @project_id=@projectName OUTPUT
DECLARE @project_id UNIQUEIDENTIFIER = (SELECT project_id FROM [SSISDB].[catalog].[projects] WHERE project_name=@projectName)

EXEC [SSISDB].[catalog].[create_environment_reference] @folder_name=@folderName, @project_name=@projectName, @environment_name='MyISEnvironment'

DECLARE @package_id BIGINT
EXEC [SSISDB].[catalog].[create_package] @folder_name=@folderName, @project_name=@projectName, @package_name=@packageName, @package_id=@package_id OUTPUT, @description=@description

-- 添加数据源和目标组件
DECLARE @source_connection NVARCHAR(MAX) = 'Data Source=localhost;Initial Catalog=MY_SOURCE_DATABASE;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;'
DECLARE @destination_connection NVARCHAR(MAX) = 'Data Source=localhost;Initial Catalog=MY_DESTINATION_DATABASE;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;'

DECLARE @execution_id BIGINT
EXEC [SSISDB].[catalog].[create_execution] @folder_name=@folderName, @project_name=@projectName, @package_name=@packageName, @use32bitruntime=0, @execution_id=@execution_id OUTPUT

-- 添加数据源和目标连接管理器
DECLARE @source_connection_id BIGINT
EXEC [SSISDB].[catalog].[create_connection] @folder_name=@folderName, @project_name=@projectName, @connection_name='MySourceConnection', @connection_string=@source_connection, @connection_id=@source_connection_id OUTPUT

DECLARE @destination_connection_id BIGINT
EXEC [SSISDB].[catalog].[create_connection] @folder_name=@folderName, @project_name=@projectName, @connection_name='MyDestinationConnection', @connection_string=@destination_connection, @connection_id=@destination_connection_id OUTPUT

-- 执行包
DECLARE @parameter_name VARCHAR(50) = N'MyParameter'
DECLARE @parameter_value VARCHAR(50) = N'MyParameterValue'

EXEC [SSISDB].[catalog].[set_parameter_value] @folder_name=@folderName, @project_name=@projectName, @package_name=@packageName, @parameter_name=@parameter_name, @parameter_value=@parameter_value

EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=@parameter_name, @parameter_value=@parameter_value

EXEC [SSISDB].[catalog].[start_execution] @execution_id

这段代码演示了如何使用 T-SQL 构建一个新的 Integration Services 包,并添加数据源和目标组件。然后,执行包,并传递参数值。