📅  最后修改于: 2023-12-03 15:32:59.424000             🧑  作者: Mango
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 包,并添加数据源和目标组件。然后,执行包,并传递参数值。