Sql server 2008 r2 在SQL Server大容量插入中,如何为字段和行终止符使用更高的ASCII字符

Sql server 2008 r2 在SQL Server大容量插入中,如何为字段和行终止符使用更高的ASCII字符,sql-server-2008-r2,ascii,bulkinsert,extended-ascii,terminator,Sql Server 2008 R2,Ascii,Bulkinsert,Extended Ascii,Terminator,我有一个在SQLServer2000上工作的大容量插入,我正试图在SQLServer2008R2上运行它,但它并没有像我希望的那样工作。我已经成功地在SQL 2000中运行了这些大容量插入,如下所示: 格式文件: 8.0 9 1 SQLCHAR 0 0 "ù" 1 Col1 "" 2 SQLCHAR 0 0 "ù" 2 Col2 "" 3 SQLCHAR 0 0 "ù" 3 Col3 "" 4 SQLCHAR 0 0 "ù" 4 Col4 "" 5 SQLCHAR 0 0 "ù" 5 Col5

我有一个在SQLServer2000上工作的大容量插入,我正试图在SQLServer2008R2上运行它,但它并没有像我希望的那样工作。我已经成功地在SQL 2000中运行了这些大容量插入,如下所示:

格式文件:

8.0
9
1 SQLCHAR 0 0 "ù" 1 Col1 ""
2 SQLCHAR 0 0 "ù" 2 Col2 ""
3 SQLCHAR 0 0 "ù" 3 Col3 ""
4 SQLCHAR 0 0 "ù" 4 Col4 ""
5 SQLCHAR 0 0 "ù" 5 Col5 ""
6 SQLCHAR 0 0 "ú" 6 Col6 ""
7 SQLCHAR 0 0 "" 0 Col7 ""
8 SQLCHAR 0 0 "" 0 Col8 ""
9 SQLCHAR 0 0 "" 0 Col9 ""
数据文件:

101ù110115100ùC02BCD72-083E-46EE-AA68-848F2F36DB4Dù0ù1ùCú
批量插入命令:

bulk insert Database1.dbo.Table1
            from 'C:\DataFile.dat'
            with 
                (
                      formatfile = 'C:\FormatFile.fmt'
                    , tablock
                    , check_constraints
                    , maxerrors = 0
                )
现在,我正在SQL 2008 R2框上运行,出现以下错误:

Bulk load: An unexpected end of file was encountered in the data file.
如果我将字段终止符从ascii 249(ù)更改为逗号(,),并将行终止符从ascii 250(ú)更改为分号(;),则所有内容都将运行。但是,这并不是一个真正的选项(数据中肯定包含这些字符),我不想选择像!@#$%这样的任意字符串^&*()用于我的分隔符(必须以这种方式编辑更多代码)

我尝试了代码页、数据文件类型、排序规则、sql compat级别和格式文件版本的几种组合,但都没有效果(我不知道这些组合如何相互作用来改变这里的任何内容)。批量插入MSDN文档的各个部分都提到了有关大于127或小于32的ascii字符的特殊规则,但我不太清楚这会如何影响分隔符

我能做些什么来尽可能少地接触代码,但让它在我的新服务器上运行

更新(解决方案)

感谢@Adam Wenger的评论,我找到了一个解决方案。为了处理数据中的字符,我不再使用格式文件,而是将批量插入数据文件作为unicode(而不是ANSI)写入文件系统(即使我的数据中实际上没有unicode字符)。下面是我的新批量插入语句(注意“widechar”):


无论我做了什么尝试,我都无法使格式文件使用扩展ASCII字符(127以上)。我只是去掉了格式文件,现在在我的数据文件中添加了额外的字段分隔符来表示我没有导入的列(我对这些列有默认值)。

WITH
块中指定
DATAFILETYPE='widechar'
可以通过指定
批量插入
中的“widechar”字段和行终止符,以及
。我在unicode字符格式中引用了该字段和行终止符以导入数据

BULK INSERT Database1.dbo.Table1
FROM 'C:\DataFile.dat'
WITH ( TABLOCK
   , CHECK_CONSTRAINTS
   , MAXERRORS = 0
   , DATAFILETYPE = 'widechar'
   , FIELDTERMINATOR = 'ù'
   , ROWTERMINATOR = 'ú'
)

请查看使用块在
中指定
DATAFILETYPE='widechar'
。看起来很有希望。@Adam Wenger,你为我指出了正确的方向。谢谢!请随意结合你的建议和我的更新创建一个答案。
BULK INSERT Database1.dbo.Table1
FROM 'C:\DataFile.dat'
WITH ( TABLOCK
   , CHECK_CONSTRAINTS
   , MAXERRORS = 0
   , DATAFILETYPE = 'widechar'
   , FIELDTERMINATOR = 'ù'
   , ROWTERMINATOR = 'ú'
)