⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档 (2).txt

📁 SQL Server2000提供了OpenXML特性,我们可以很方便的用OpenXML特性来代替传统的行集结果
💻 TXT
📖 第 1 页 / 共 2 页
字号:
  SELECT   *   from   T   
  UPDATE   T   
  SET   XmlCol   =(   
  SELECT   *   FROM   OPENROWSET(   
        BULK   'C:\SampleFolder\SampleData3.txt',   
                        SINGLE_BLOB   
  )   AS   x   
  )   
  WHERE   IntCol   =   1   




SQL Server 2008 联机丛书(2008 年 8 月)
大容量导入和导出 XML 文档的示例

可以将 XML 文档大容量导入到 SQL Server 数据库中,也可以从 SQL Server 数据库中大容量导出 XML 文档。本主题提供了这两种情况的示例。 

若要将数据从一个数据文件大容量导入 SQL Server 表或未分区视图,可以使用以下工具或命令: 

bcp 实用工具 
还可以使用 bcp 实用工具将数据从可执行 SELECT 语句的 SQL Server 数据库的任意位置(包括分区视图)导出。

BULK INSERT 

INSERT ...SELECT * FROM OPENROWSET(BULK...) 

有关详细信息,请参阅使用 bcp 实用工具导入和导出大容量数据和使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。

 示例 
下列示例说明了以下操作内容:

A. 以二进制字节流的形式大容量导入 XML 数据 

B. 将 XML 数据大容量导入现有行中 

C. 从包含 DTD 的文件中大容量导入 XML 数据 

D. 使用格式化文件显式指定字段终止符 

E. 大容量导出 XML 数据 

A. 以二进制字节流的形式大容量导入 XML 数据
在从文件大容量导入 XML 数据时,如果文件中包含您要应用的编码声明,则应在 OPENROWSET(BULK…) 子句中指定 SINGLE_BLOB 选项。SINGLE_BLOB 选项可确保 SQL Server 中的 XML 分析器根据 XML 声明中指定的编码方案导入数据。 

示例表
若要测试示例 A,必须创建示例表 T。

 复制代码 
USE tempdb
CREATE TABLE T (IntCol int, XmlCol xml)
GO 

示例数据文件
在运行示例 A 之前,必须先创建一个 UTF-8 编码文件 (C:\SampleFolder\SampleData3.txt),该文件应包含指定了 UTF-8 编码方案的以下示例实例。

 复制代码 
<?xml version="1.0" encoding="UTF-8"?>
<Root>
          <ProductDescription ProductModelID="5">
             <Summary>Some Text</Summary>
          </ProductDescription>
</Root> 

示例 A
此示例使用 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句中的 SINGLE_BLOB 选项从名为 SampleData3.txt 的文件中导入数据,并在包含单列的示例表 T 中插入一个 XML 实例。

 复制代码 
INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(
   BULK 'c:\SampleFolder\SampleData3.txt',
   SINGLE_BLOB) AS x 

注释
在这个例子中,通过使用 SINGLE_BLOB,可以避免 XML 文档的编码(由 XML 编码声明所指定)与服务器隐含使用的字符串代码页不匹配的问题。

如果使用 NCLOB 或 CLOB 数据类型且遇到代码页或编码冲突,则必须执行下列操作之一:

删除 XML 声明,以成功导入 XML 数据文件的内容。 

在查询的 CODEPAGE 选项中指定一个代码页,该代码页须与 XML 声明中使用的编码方案相匹配。 

使用非 Unicode XML 编码方案匹配或解析数据库排序规则设置。

[返回页首] 

B. 将 XML 数据大容量导入现有行中
此示例使用 OPENROWSET 大容量行集提供程序向示例表 T 中的现有行添加一个 XML 实例。 

注意: 
若要运行此示例,必须先完成示例 A 中提供的测试脚本。该示例创建了 tempdb.dbo.T 表,并从 SampleData3.txt 中大容量导入数据。
 


示例数据文件
示例 B 使用的是上例所使用 SampleData3.txt 示例数据文件的修改版本。若要运行此示例,请按如下所示修改此文件的内容:

 复制代码 
<Root>
          <ProductDescription ProductModelID="10">
             <Summary>Some New Text</Summary>
          </ProductDescription>
</Root> 

示例 B
 复制代码 
-- Query before update shows initial state of XmlCol values.
SELECT * FROM T
UPDATE T
SET XmlCol =(
SELECT * FROM OPENROWSET(
   BULK 'C:\SampleFolder\SampleData3.txt',
           SINGLE_BLOB
) AS x
)
WHERE IntCol = 1
GO 

[返回页首] 

C. 从包含 DTD 的文件中大容量导入 XML 数据
安全说明: 
若非您的 XML 环境有特殊要求,建议不要启用对文档类型定义 (DTD) 的支持。启用 DTD 支持会增加服务器的可攻击外围应用,并且可能会使它受到拒绝服务攻击。如果必须启用 DTD 支持,可以通过仅处理可信的 XML 文档来降低安全风险。
 


在尝试使用 bcp 命令从包含 DTD 的文件中导入 XML 数据的过程中,可能会出现如下错误:

“SQLState = 42000,NativeError = 6359”

“错误 = [Microsoft][SQL Server Native Client][SQL Server]不允许使用内部子集 DTD 分析 XML。请将 CONVERT 与样式选项 2 一起使用,以启用有限的内部子集 DTD 支持。”

“BCP 复制 %s 失败”

若要解决此问题,可以使用 OPENROWSET(BULK...) 函数,并在命令的 SELECT 子句中指定 CONVERT 选项,以从包含 DTD 的数据文件中导入 XML 数据。该命令的基本语法如下:

INSERT ... SELECT CONVERT(…) FROM OPENROWSET(BULK...) 

示例数据文件
在测试此大容量导入示例之前,需要先创建一个包含以下示例实例的文件 (C:\temp\Dtdfile.xml):

 复制代码 
<!DOCTYPE DOC [<!ATTLIST elem1 attr1 CDATA "defVal1">]><elem1>January</elem1> 

示例表
示例 C 使用由以下 CREATE TABLE 语句创建的 T1 示例表: 

 复制代码 
USE tempdb
CREATE TABLE T1(XmlCol xml);
GO 

示例 C
此示例使用 OPENROWSET(BULK...),并在 SELECT 子句中指定了 CONVERT 选项,从而将 XML 数据从 Dtdfile.xml 导入到了示例表 T1 中。

 复制代码 
INSERT T1
  SELECT CONVERT(xml, BulkColumn, 2) FROM 
    OPENROWSET(Bulk 'c:\temp\Dtdfile.xml', SINGLE_BLOB) [rowsetresults] 

执行 INSERT 语句后,会将 DTD 从 XML 中提取出来,并存储到 T1 表中。

[返回页首] 

D. 使用格式化文件显式指定字段终止符
下面的示例说明如何大容量导入 XML 文档 Xmltable.dat。 

示例数据文件
Xmltable.dat 中的文档包含两个 XML 值,每行一个。第一个 XML 值的编码为 UTF-16,第二个值的编码为 UTF-8。

下面的十六进制转储显示了此数据文件的内容:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -