嗨,我想从包含波兰语字符的 xml 文件导入数据,但失败了。我的 xml 文件是 utf8 格式,我确信这不是问题。我的表中的列是 nvarchar,我可以“插入”波兰语字符,但不能使用脚本或导入向导。这是我的脚本:
USE db name
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
DECLARE @xml NVARCHAR(MAX);
SELECT @xml = CONVERT(NVARCHAR(MAX), BulkColumn)
FROM OPENROWSET(BULK 'path to xml file', SINGLE_CLOB) AS x;
DECLARE @hDoc INT;
EXEC sp_xml_preparedocument @hDoc OUTPUT, @xml;
INSERT INTO mytable (column)
SELECT
z.column
FROM OPENXML(@hDoc, '/root/people/person', 2)
WITH (
column NVARCHAR(50) 'column',
) AS z;
EXEC sp_xml_removedocument @hDoc;
尝试更改数据库XML文件通过不同方式导入XML编码,对波兰语字符不起作用,只能插入,但我有很多数据无法一一完成。
将波兰语字符从 XML 文件导入 SQL Server 的解决方案涉及对原始脚本的两个主要更改。首先,不应在 OPENROWSET 函数中使用 SINGLE_CLOB,而应切换到 SINGLE_NCLOB(Unicode 版本)并显式指定 UTF-8 代码页 (65001)。这告诉 SQL Server 在文件读取操作期间期望并正确处理 Unicode 字符。
其次,您可以向 sp_xml_preparedocument 过程调用添加编码参数,其中包括指定 UTF-8 字符集的 XML 元数据属性。这确保了当 SQL Server 处理 XML 文档时,它在整个操作过程中保持正确的字符编码,从而防止波兰语变音符号出现任何损坏或误解。
这些更改与目标表中 NVARCHAR 列的使用相结合,创建了一个完整的管道,可以保留从源 XML 文件到最终数据库存储的 Unicode 字符。原始脚本可能在这些步骤之一丢失字符编码信息,导致波兰语字符损坏。