【发布时间】:2021-10-14 11:33:19
【问题描述】:
背景:我正在更新 PowerShell 中的脚本,这些脚本会定期将大量数据从非 MS 数据库导出到不同主机上的 SQL Server。
在导出方面,我选择了 .NET System.Data.Dataset 对象作为数据格式。传输文件是使用带有WriteSchema 选项的WriteXml 方法创建的。这种方法支持多个表,并将接收服务器的数据库模式信息保留在一个文件中。
根据请求,一个基本的DataSet 文件可能是:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="table1">
<xs:complexType>
<xs:sequence>
<xs:element name="col1" type="xs:string" minOccurs="0" />
<xs:element name="col2" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="table2">
<xs:complexType>
<xs:sequence>
<xs:element name="col1" type="xs:string" minOccurs="0" />
<xs:element name="col2" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<table1>
<col1>tkshrq</col1>
<col2>6krrtq</col2>
</table1>
<table1>
<col1>k60stu</col1>
<col2>sqnhp9</col2>
</table1>
<table2>
<col1>6k1thw</col1>
<col2>n2ocgz</col2>
</table2>
<table2>
<col1>26kmw5</col1>
<col2>ym3iwd</col2>
</table2>
</NewDataSet>
在接收端,我有一个导入脚本,它利用Write-SqlTableData 将表从DataSet 文件批量加载到临时表中,然后运行存储过程以在数据移动到“实时”表时提供事务隔离.
我希望找到一种从 T-SQL 中直接访问 DataSet 文件的方法,以便可以通过单个存储过程完成导入。
我知道如何为平面“行集”文件(CSV、DataTable 等)设置链接服务器并使用OPENROWSET 查询它们。但是我没有成功访问多表DataSet文件。
我对更改传输文件格式不感兴趣。它有几个理想的功能,我宁愿处理大量的临时表,也不愿处理大量的传输文件。
我还知道 SQL Server 的第三方 XML ODBC 提供程序。但在这种情况下不允许使用第三方软件。
【问题讨论】:
-
请提供您的数据集 XML 文件的最小示例。
标签: sql-server dataset