爱心技术专栏专题

MicrosoftSQLServer2000中的数据转换服务(DTS)

摘录:数据库区 - MS SQL 来源:数据库区 - MS SQL 加入时间:2007年04月30日
摘要:
MicrosoftSQLServer2000中的数据转换服务(DTS)
Microsoft SQL Server 2000 中的数据转换服务 (DTS)

DTS 简介

大多数机构都有数据的多种存储格式和多个存储位置。为了支持决策制定、改善性能或更新现有

DTS 简介

大多数机构都有数据的多种存储格式和多个存储位置。为了支持决策制定、改善性能或更新现有,数据经常必须从一个数据存储位置移动到另一个存储位置。

Microsoft? SQL Server? 2000 数据转换服务 (DTS) 提供了一组工具,使您可以将数据从不同的源提取、转换和合并到一个或多个目标。使用 DTS 工具,可以创建专门适用于您机构特殊需要的自定义数据移动解决方案,如下面的方案所示:

您已经在 SQL Server 或另一平台(如 Microsoft Access)的早期版本中部署了应用。新版本的应用要求使用 SQL Server 2000,并且要求您更改架构和转换一些数据类型。

要复制和转换数据,可以生成一个 DTS 解决方案,此解决方案将对象从原始数据源复制到 SQL Server 2000 中,同时重新映射列并更改数据类型。您可以使用 DTS 工具运行此解决方案,也可以将此解决方案嵌入到应用中。

必须将一些关键的 Microsoft Excel 电子表格合并到 SQL Server 中。一些部门会在月末创建电子表格,但是不会对所有电子表格的完成设置计划。

要合并电子表格数据,可以生成一个在某个消息发送到消息队列时运行的 DTS 解决方案。此消息触发 DTS 从电子表格提取数据,执行任何已定义的转换,以及将数据加载到 SQL Server 中。

您的数据仓库包含有关业务运行的历史数据,您可以使用 Microsoft SQL Server 2000 Analysis Service 汇总这些数据。您的数据仓库需要每晚从联机事务处理 (OLTP) 进行更新。您的 OLTP 一天 24 小时运行,性能要求很严格。

可以生成一个 DTS 解决方案,此解决方案使用传输协议 (FTP) 将数据移动到本地驱动器上,将数据加载到事实数据表中,然后使用 Analysis Service 聚合这些数据。可以将这个 DTS 解决方案计划为每晚运行,还可以使用新的 DTS 日志记录选项跟踪此过程占用的时间,以便于您随着时间的推移对性能进行分析。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

DTS 是什么?

DTS 是一组可用来在一个或多个数据源(如 Microsoft SQL Server、Microsoft Excel 或 Microsoft Access)之间导入、导出和转换异类数据的工具。连接是通过 OLE DB(一种数据访问开放标准)提供的。ODBC(开放式连接)数据源则是通过用于 ODBC 的 OLE DB 提供支持的。

可以将 DTS 解决方案创建为一个或多个包。每个包都可能包含一组用来定义要执行工作的经过组织的任务、对数据和对象的转换、用来定义任务执行的工作流约束以及与数据源和目标的连接。DTS 包还提供了一些服务,例如记录包执行详细信息、控制事务和处理全局变量。

下面的这些工具可用于创建和执行 DTS 包:

“导入/导出向导”用于生成相对简单的 DTS 包,并支持数据迁移和简单转换。

DTS 设计器以图形化的形式实现 DTS 对象模型,使您可以创建具有广泛功能的 DTS 包。

DTSRun是用于执行现有 DTS 包的命令提示实用工具。

DTSRunUI 是DTSRun的图形界面,也可以用于传递全局变量和生成命令行。

SQLAgent 不是 DTS 应用,但是可由 DTS 用来计划包的执行。

使用 DTS 对象模型,还可以通过编程方式创建和运行包,生成自定义任务以及生成自定义转换。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

DTS 的新增功能

Microsoft SQL Server 2000 引入了一些 DTS 增强功能和新功能:

新的 DTS 任务包括 FTP 任务、“执行包”任务、“动态属性”任务和“消息队列”任务。

增强的日志记录会保存每个包执行的信息,使您可以维护完整的执行历史记录,并且能够查看任务中每个过程的信息。您可以生成异常,这些中包含多行由于错误而不能处理的数据。

您可以将 DTS 包保存为 Microsoft Visual Basic? 。

新的多阶段数据抽取使高级用户可以在各个阶段自定义数据转换的运行。另外,还可以使用全局变量作为查询的输入参数。

在 DTS 转换任务和“执行 SQL”任务中,可以使用参数化的源查询。

您可以使用“执行包”任务将全局变量的值从父包动态分配到子包。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

使用 DTS 设计器

DTS 设计器以图形的形式实现 DTS 对象模型,使您可以图形化创建 DTS 包。可以使用 DTS 设计器进行下列操作:

创建包含一个或多个步骤的简单包。

创建包含复杂工作流(此工作流包括使用条件逻辑的多个步骤)、事件驱动代码或到数据源的多个连接的包。

编辑现有的包。

DTS 设计器界面由用于生成包的工作区、包含包元素的工具栏(这些包元素可拖动到设计表上),以及包含工作流和包管理命令的菜单组成。

sqlserver/art/dtsoverview01_designer.gif" width="642" border="0"/>

1. DTS 设计器界面

 

通过将连接和任务拖动到设计表上,以及利用工作流指定执行顺序,可以使用 DTS 设计器轻松地生成功能强大的 DTS 包。下面几节内容定义了任务、工作流、连接和转换,并阐释了使用 DTS 设计器实现 DTS 解决方案的方便之处。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

任务:包中的定义步骤

DTS 包通常包括一个或多个任务。每个任务都定义一个可在包执行过程中执行的工作项目。可以使用任务执行下列操作:

转换数据

sqlserver/art/dtsoverview02_transform.gif" width="24" border="0"/>

转换数据任务

用来在源和目标之间移动数据,以及对数据应用列级转换(可选)。

sqlserver/art/dtsoverview02_transform.gif" width="24" border="0"/>

转换数据任务

用来在源和目标之间移动数据,以及对数据应用列级转换(可选)。

sqlserver/art/dtsoverview03_ddq.gif" width="24" border="0"/>

数据驱动查询任务

用来对数据执行灵活的基于 Transact-SQL 的操作,其中包括存储过程以及 INSERTUPDATE DELETE 语句。

 

“并行数据抽取”任务1“并行数据抽取”任务只能以编程方式使用,它除了执行与“转换数据”和“数据驱动查询”任务相同的功能外,还支持按照 OLE DB 2.5 及更高版本定义的方式划分的行集。

复制和管理数据

sqlserver/art/dtsoverview04_bulk.gif" width="24" border="0"/>

批量插入任务

用来将大量数据快速加载到 SQL Server 表或视图中。

sqlserver/art/dtsoverview05_exec.gif" width="23" border="0"/>

执行 SQL”任务

用来在包执行过程中运行 SQL 语句。执行 SQL”任务还可以保存作为查询结果的数据。

sqlserver/art/dtsoverview06_copy.gif" width="22" border="0"/>

复制 SQL Server 对象任务

用来将 SQL Server 对象从 SQL Server 的一个安装或实例复制到另一个。可以复制对象(例如,数据和表)以及对象的定义(例如,视图和存储过程)。

sqlserver/art/dtsoverview07_xferdb.gif" width="23" border="0"/>

传输任务

用来将 SQL Server 从一个 SQL Server 7.0 版或 SQL Server 2000 实例移动或复制到另一个 SQL Server 2000 的实例。

sqlserver/art/dtsoverview08_xfererror.gif" width="24" border="0"/>

传输错误消息任务

用来将 sp_addmessage 存储过程所创建的用户指定的错误消息,从一个 SQL Server 7.0 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。

sqlserver/art/dtsoverview09_xferlogins.gif" width="23" border="0"/>

传输登录任务

用来将登录从一个 SQL Server 7.0 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。

sqlserver/art/dtsoverview10_xferjobs.gif" width="24" border="0"/>

传输作业任务

用来将作业从一个 SQL Server 7.0 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。

sqlserver/art/dtsoverview11_xfersp.gif" width="23" border="0"/>

传输主存储过程任务

用来将存储过程从一个 SQL Server 7.0 SQL Server 2000 实例上的主复制到另一个 SQL Server 2000 例上的主

 

将包中的任务作为作业运行

sqlserver/art/dtsoverview12_activex.gif" width="23" border="0"/>

批量插入任务

用来将大量数据快速加载到 SQL Server 表或视图中。

sqlserver/art/dtsoverview13_dynprop.gif" width="23" border="0"/>

执行 SQL”任务

用来在包执行过程中运行 SQL 语句。执行 SQL”任务还可以保存作为查询结果的数据。

sqlserver/art/dtsoverview14_execpack.gif" width="23" border="0"/>

复制 SQL Server 对象任务

用来将 SQL Server 对象从 SQL Server 的一个安装或实例复制到另一个。可以复制对象(例如,数据和表)以及对象的定义(例如,视图和存储过程)。

sqlserver/art/dtsoverview15_execproc.gif" width="23" border="0"/>

传输任务

用来将 SQL Server 从一个 SQL Server 7.0 版或 SQL Server 2000 实例移动或复制到另一个 SQL Server 2000 的实例。

sqlserver/art/dtsoverview16_ftp.gif" width="23" border="0"/>

传输错误消息任务

用来将 sp_addmessage 存储过程所创建的用户指定的错误消息,从一个 SQL Server 7.0 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。

sqlserver/art/dtsoverview17_messageq.gif" width="23" border="0"/>

传输登录任务

用来将登录从一个 SQL Server 7.0 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。

sqlserver/art/dtsoverview18_sendmail.gif" width="23" border="0"/>

传输作业任务

用来将作业从一个 SQL Server 7.0 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。

sqlserver/art/dtsoverview19_analysis.gif" width="21" border="0"/>

传输主存储过程任务

用来将存储过程从一个 SQL Server 7.0 SQL Server 2000 实例上的主复制到另一个 SQL Server 2000 实例上的主

 

1 SQL Server 2000 中的新增功能。

2 2 只有安装了 SQL Server 2000 分析服务的情况下才可用。

您还可以通过编程方式创建自定义任务,然后使用“注册自定义任务”命令将它们集成到 DTS 设计器中。

为了阐释这些任务的使用,这里有一个简单的 DTS 包,其中具有下列两个任务:“Microsoft ActiveX? 脚本”任务和“发送邮件”任务:

sqlserver/art/dtsoverview21_tasks.gif" width="261" border="0"/>

2. 具有两个任务的 DTS

 

“ActiveX 脚本”任务可以承载任何“ActiveX 脚本”引擎,其中包括 Microsoft Visual Basic Scripting Edition (Script)、Microsoft JScript? 或 ActiveState ActivePerl,这些引擎可从 http://www.activestate.com 下载。“发送邮件”任务可以发送一条表明包已经运行的消息。请注意,这些任务没有顺序。当包执行时,“ActiveX 脚本”任务和“发送邮件”任务会同时运行。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

工作流:设置任务优先顺序

定义一组任务时,这些任务通常应该按照某种顺序执行。当任务按顺序执行时,每个任务就成为了过程中的一个步骤。在 DTS 设计器中,可以在 DTS 设计器设计表中操作任务,并使用优先约束控制任务的执行顺序。

优先约束按顺序链接包中的任务。下表显示了可以在 DTS 中使用的优先约束的类型。

优先约束 说明

完成时(蓝色箭头)

如果想让任务 2 等待任务 1 完成(无论结果如何),则可以使用“完成时”优先约束将任务 1 链接到任务 2。

成功时(绿色箭头)

如果想让任务 2 等待任务 1 成功完成,则可以使用“成功时”优先约束将任务 1 链接到任务 2。

成功时(绿色箭头)

如果想让任务 2 只在任务 1 无法成功执行时开始执行,则可以使用“失败时”优先约束将任务 1 链接到任务 2。

 

下图显示了带有“完成时”优先约束的“ActiveX 脚本”任务和“发送邮件”任务。当“Active X 脚本”任务完成(无论成功或失败)时,“发送邮件”任务运行。

sqlserver/art/dtsoverview25_workflow.gif" width="313" border="0"/>

3. 带有完成时优先约束的“ActiveX 脚本任务和发送邮件任务

 

可以配置两个单独的“发送邮件”任务,一个用于“成功时”约束,另一个用于“失败时”约束。这两个“发送邮件”任务可以根据 ActiveX 脚本的成功或失败发送不同的消息。

sqlserver/art/dtsoverview26_multiout.gif" width="348" border="0"/>

4. 邮件任务

 

您还可以对一个任务发出多个优先约束。例如,“发送邮件”任务“管理通知”可以同时具有来自脚本 #1 的“成功时”约束和来自脚本 #2 的“失败时”约束。在这些情况下,DTS 采用逻辑“与”关系。因此,要使得“管理通知”消息能够得以发送,脚本 #1 必须成功执行,而脚本 #2 必须失败。

sqlserver/art/dtsoverview27_multiin.gif" width="267" border="0"/>

5. 一个任务上多个优先约束的示例

 
server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

连接:访问和移动数据

要成功执行复制并转换数据的 DTS 任务,DTS 包必须建立与其源数据和目标数据,以及与任何其他数据源(如查找表)的有效连接。创建包时,可通过从可用 OLE DB 提供和 ODBC 驱动列表选择连接类型来配置连接。可用的连接类型有:

Microsoft 数据访问组件 (MDAC) 驱动

dtsoverview28_oledb<a href=sql.gif" src="http://www.microsoft.com/china/MSDN/library/data/server/art/dtsoverview28_oledb.gif" width="21" border="0"/>用于 SQL Server 的 Microsoft OLE DB 提供

dtsoverview29_datalink.gifsqlserver/art/dtsoverview29_datalink.gif" width="21" border="0"/>Microsoft 数据链接

dtsoverview30_oracle.gifsqlserver/art/dtsoverview30_oracle.gif" width="21" border="0"/>用于 Oracle 的 Microsoft ODBC 驱动

Microsoft Jet 驱动

dtsoverview31_dbase.gifsqlserver/art/dtsoverview31_dbase.gif" width="21" border="0"/>dBase 5

dtsoverview32_access.gifsqlserver/art/dtsoverview32_access.gif" width="21" border="0"/>Microsoft Access

dtsoverview33_html.gifsqlserver/art/dtsoverview33_html.gif" width="21" border="0"/>HTML (源)

dtsoverview34_excel.gifsqlserver/art/dtsoverview34_excel.gif" width="21" border="0"/>Microsoft Excel 97-2000

dtsoverview35_paradox.gifsqlserver/art/dtsoverview35_paradox.gif" width="21" border="0"/>Paradox 5.X

其他驱动

dtsoverview36_texts.gifsqlserver/art/dtsoverview36_texts.gif" width="21" border="0"/>文本(源)

dtsoverview37_textd.gifsqlserver/art/dtsoverview37_textd.gif" width="21" border="0"/>文本(目标)

dtsoverview38_other.gifsqlserver/art/dtsoverview38_other.gif" width="21" border="0"/>其他连接

DTS 允许您使用任何 OLE DB 连接。“连接”工具栏上的图标提供了对常用连接的便捷访问。下图显示了一个具有两个连接的包。数据正从 Access (源连接)复制到 SQL Server 产品(目标连接)。

sqlserver/art/dtsoverview39and40_connect.gif" width="456" border="0"/>

6. 具有两个连接的包的示例

 

此包中的第一步是“执行 SQL”任务,此任务会查看目标表是否已存在。如果存在,则会除去并重新创建目标表。如果“执行 SQL”任务成功,则会在步骤 2 中将数据复制到 SQL Server 。如果复制操作失败,则会在步骤 3 中发送一个电子邮件。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

数据抽取:转换数据

DTS 数据抽取是用来驱动数据的导入、导出和转换的 DTS 对象。将在“转换数据”、“数据驱动查询”和“并行数据抽取”任务的执行过程中使用数据抽取。这些任务是通过下列操作完成的:对源和目标连接创建行集,然后创建数据抽取的一个实例以在源和目标之间移动行。对于每行的转换在复制该行时进行。

在下图的步骤 2 中,Access 任务和 SQL 产品任务之间使用了“传输数据”任务。“传输数据”任务是两个连接之间的灰色箭头。

sqlserver/art/dtsoverview39and40_connect.gif" width="456" border="0"/>

7.“传输数据任务的示例

 

要定义从源连接收集的数据,可以为传输任务生成一个查询。DTS 支持参数化的查询,使您可以在执行查询时定义查询值。

您可以在任务的属性对话框中键入查询,也可以使用“数据转换服务查询设计器”,“数据转换服务查询设计器”是一个用于以图形方式为 DTS 任务生成查询的工具。在下图中,使用“查询设计器”生成了一个联接 pubs 中三个表的查询。

sqlserver/art/dtsoverview41_designer_thumb.gif" width="250" border="0"/>

8.“数据转换服务查询设计器界面(单击可以放大)

 

在转换任务中,还可以定义对数据的任何更改。下表描述了 DTS 提供的内置转换。

转换 说明

复制列

用来将数据直接从源列复制到目标列,而不对数据应用任何转换。

ActiveX 脚本

用来生成自定义转换。请注意,由于转换是以逐行为基础发生的,所以 ActiveX 脚本可能会影响 DTS 包的执行速度。

Datetime 串

用来将源列中的日期或时间转换为目标列中的其他格式。

小写串

用来将源列转换为小写,如果需要,则转换为目标数据类型。

大写串

用来将源列转换为全部大写,如果需要,则转换为目标数据类型。

串中间部分

用来从源列提取子串,对其进行转换,然后将结果复制到目标列。

剪裁串

用来从源列中的串删除起始空格、尾随空格和嵌入空格,并将结果复制到目标列。

读取

用来打开某一(其名称在源列中指定)的内容,并将这些内容复制到目标列。

写入

用来将源列(数据列)的内容复制到第二个源列(名列)指定其路径的某个中。

 

您还可以以编程方式创建自己的自定义转换。生成自定义转换的最快方法是使用活动模板库 (ATL) 自定义转换模板,该模板包括在 SQL Server 2000 DTS 示例中。

数据抽取错误日志记录

在 SQL Server 2000 中可以使用一种记录转换错误的新方法。您可以定义可在包执行过程中使用的三个异常日志:错误文本、源错误行和目标错误行。

一般错误信息会写入错误文本。

如果转换失败,则源行有错误,该行会写入到源错误行。

如果插入失败,则目标行有错误,该行会写入到目标错误行。

执行日志是在转换数据的任务中定义的。每个转换任务都有其自己的日志。

数据抽取阶段

默认情况下,数据抽取有一个阶段:行转换。此阶段是您在“转换数据”任务、“数据驱动查询”任务和“并行数据抽取”任务中映射列级转换而没有选择阶段时,进行配置的阶段。

现在 SQL Server 2000 中新增了多个数据抽取阶段。通过在 SQL Server 企业管理器中选择多阶段数据抽取选项,可以在数据抽取操作过程中的几个点访问数据抽取,还可以添加功能。

将一行数据从源复制到目标时,数据抽取遵循下图中显示的基本过程。

9. 数据抽取过程(单击可以放大)

数据抽取处理了最后一行数据后,任务完成,数据抽取操作终止。

想要向包添加功能以便它支持任何数据抽取阶段的高级用户,可以通过执行下列操作完成此目标:

为要自定义的每个数据抽取阶段编写一个 ActiveX 脚本阶段函数。如果使用 ActiveX 脚本函数来自定义数据抽取阶段,就不需要包之外的任何其他代码了。

在 Microsoft Visual C++? 中创建 COM 对象,以自定义选定的数据抽取阶段。开发不属于此包的,并对于转换的每个选定阶段调用此。此方法与访问数据抽取阶段的 ActiveX 脚本方法不同,它提供了在数据抽取任务执行时由多个数据抽取阶段调用的一个入口点,而后者则对每个选定阶段使用不同的函数和入口点。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

保存 DTS 包的选项

下列这些选项可用于保存 DTS 包:

Microsoft SQL Server

如果想在上的任何 SQL Server 实例上存储包、保留这些包的方便清单,并且想在包开发过程中添加和删除包版本,则请将您的 DTS 包保存到 Microsoft SQL Server。

SQL Server 2000 Meta Data Services

如果计划跟踪包版本、元数据和数据沿袭信息,则请将您的 DTS 包保存到 Meta Data Services。

结构化存储

如果想通过复制、移动和发送包,则请将您的 DTS 包保存到结构化存储,而不必将该包存储在 Microsoft SQL Server 中。

Microsoft Visual Basic

如果想将 DTS 设计器或 DTS 导入/导出向导创建的 DTS 包集成到 Visual Basic 中,或将它用作 DTS 应用开发的原型,则请将该包保存到 Microsoft Visual Basic 。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

将 DTS 作为应用开发平台

DTS 设计器为数据移动任务提供了广泛的解决方案。通过提供对 DTS 对象模型的编程化访问,DTS 扩展了可用解决方案的数量。通过使用 Microsoft Visual Basic、Microsoft Visual C++ 或任何支持 COM 的其他应用开发,您可以使用图形化工具中不支持的功能为您的环境开发自定义的 DTS 解决方案。

DTS 以下列几种不同的方法为开发人员提供支持:

生成包

您可以在对象模型中开发非常复杂的包并访问所有的功能,而不用使用 DTS 设计器或 DTS 导入/导出向导。

扩展包

通过构造自定义任务和转换,您可以添加为您的业务自定义的且可以在 DTS 中再次使用的新功能。通过构造自定义任务和转换,您可以添加为您的业务自定义的且可以在 DTS 中再次使用的新功能。通过构造自定义任务和转换,您可以添加为您的业务自定义的且可以在 DTS 中再次使用的新功能。

执行包

不必从提供的任何工具执行 DTS 包,可以通过编程方式执行 DTS 包,并通过 COM 事件显示进度,从而允许构造嵌入的或自定义的 DTS 执行环境。

提供的示例 DTS 可用来帮助您开始 DTS 编程。这些示例可以随 SQL Server 2000 一起安装。如果开发 DTS 应用,则可以重新发布 DTS 。有关详细信息,请参阅 SQL Server 2000 光盘上的 Redist.txt。

server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首server/DataTransformationServices(DTS)inMicrosoftSQLServer2000.mspx#top">返回页首

更多信息

Microsoft SQL Server 2000 联机丛书包含了有关 DTS、使用 DTS 应用和生成自定义解决方案的更多信息。有关其他信息,请参阅这些资源:

" target="_blank">Microsoft SQL Server Web 站点

server" target="_blank">Microsoft SQL Server 开发人员中心

mag.com/" target="_blank">SQL Server 杂志

位于news://news.microsoft.com的 Microsoft.public.server.server 和 microsoft.public.server.datawarehouse 新闻组

关于 SQL Server 的 Microsoft Official Curriculum 课程。有关最新课程的信息,请参阅

转载:转载请保留本信息,本文来自http://www.51dibs.com/lp07/la/a24/l_a_8108534bd1950db8.html