Wou*_*ter 3 xml sql-server bcp encoding
我有一个纯文本数据文件,其中包含由不可打印字符"File Separator" (0x1c) 分隔的字段的记录。我正在尝试使用 SQL Server 的 bcp 实用程序将此数据加载到我的数据库中。然而,当使用文件分隔符的十六进制编码值作为 TERMINATOR 时,出现语法错误。
我试过使用
"0x1c"
""
""
这些都不起作用,但是当对可打印字符使用相同的编码时,例如tab
,这确实有效:	
, 	
(0x9
没有。不足为奇,因为这是一个 XML 文件。)
结论似乎是不支持不可打印的字符。是这种情况吗?这将是具有讽刺意味的,因为不可打印的分隔符正是为此目的而创建的......
您可以在下面找到重现此问题的所有代码:
XML 格式文件:test.xml
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="" MAX_LENGTH="10" COLLATION="Latin1_General_CS_AS_WS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="41"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="COL1" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="2" NAME="COL2" xsi:type="SQLNUMERIC" PRECISION="4" SCALE="0"/>
</ROW>
</BCPFORMAT>
Run Code Online (Sandbox Code Playgroud)
数据文件:test.txt
这只是一行,作为一个测试用例。StackExchange 不会在下面的行中显示分隔符,但是当您单击此帖子的“编辑”时,分隔符已包含在内,您应该能够复制粘贴它。
1111111112008
Run Code Online (Sandbox Code Playgroud)
命令行
bcp TEST_DB.dbo.UL_TEST in "test.txt" -T -f "test.xml"
Run Code Online (Sandbox Code Playgroud)
这似乎从有关文档的BCP -指定字段和行终止符(SQL Server)的,非打印字符,不支持:
支持作为终结符的字符
bcp 命令、BULK INSERT 语句和 OPENROWSET 批量行集提供程序支持各种字符作为字段或行终止符,并且始终查找每个终止符的第一个实例。下表列出了支持的终止符字符。
作为一种选择,您可以使用POWERSHELL
读取源文件并搜索\用0x1C
其他字符(如 tilda (~))替换这些字符,然后输出到不同的文件。然后使用该字符作为终止符。
(Get-Content c:\test\test.txt) | ForEach-Object {$_ -replace [char]0x1C,'~'} | Set-Content c:\test\testout.txt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1268 次 |
最近记录: |