有中英文系统,中文系统下安装的是Sql Server2000的排序规则选择Chinese_PRC_BIN,
英文系统下安装的Sql Server2000的排序规则选择为Latin1_General_BIN,
现有1个数据库A,创建时未指定排序规则,其中有1个数据表B,其中的varchar字段创建时也未指定排序规则。
这个表B建立了视图C,其中,对Varchar字段使用了replace函数。
用bcp.exe导出数据时,在中文系统下没有问题,但是在英文系统下会报排序规则冲突。
请问会是什么原因?1)视图如下:
CREATE VIEW vw_TZ_ForTest
AS
SELECT A.ulReserved AS 'TimeZone', B.UseXXX AS 'DaylightSave',
CAST(replace(B.StartTime,':','&') AS CHAR(8)) AS 'StartTime',
CAST(replace(B.EndTime,':','&') AS CHAR(8)) AS 'EndTime',
FROM GLOBELRESERVEDSTABLE A ,T_DaylightSavingTime B
WHERE A.ulClassIndex = 1000 AND A.ulObjectIndex =1000 AND A.ulFieldName = 1000 AND A.ulFieldValue = 1000 AND 1=1 2)导出如下:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe "SELECT * FROM vw_TZ_forTEST" queryout "D:\TZ.txt" -c -U sa -P -T -q -e "D:\vw_TZ_forTEST.log" 3)错误如下(英文系统中)
SQLState = 37000, NativeError = 446
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot resolve collation conflict for replace operation.
SQLState = 37000, NativeError = 8180
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared.
英文系统下安装的Sql Server2000的排序规则选择为Latin1_General_BIN,
现有1个数据库A,创建时未指定排序规则,其中有1个数据表B,其中的varchar字段创建时也未指定排序规则。
这个表B建立了视图C,其中,对Varchar字段使用了replace函数。
用bcp.exe导出数据时,在中文系统下没有问题,但是在英文系统下会报排序规则冲突。
请问会是什么原因?1)视图如下:
CREATE VIEW vw_TZ_ForTest
AS
SELECT A.ulReserved AS 'TimeZone', B.UseXXX AS 'DaylightSave',
CAST(replace(B.StartTime,':','&') AS CHAR(8)) AS 'StartTime',
CAST(replace(B.EndTime,':','&') AS CHAR(8)) AS 'EndTime',
FROM GLOBELRESERVEDSTABLE A ,T_DaylightSavingTime B
WHERE A.ulClassIndex = 1000 AND A.ulObjectIndex =1000 AND A.ulFieldName = 1000 AND A.ulFieldValue = 1000 AND 1=1 2)导出如下:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe "SELECT * FROM vw_TZ_forTEST" queryout "D:\TZ.txt" -c -U sa -P -T -q -e "D:\vw_TZ_forTEST.log" 3)错误如下(英文系统中)
SQLState = 37000, NativeError = 446
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot resolve collation conflict for replace operation.
SQLState = 37000, NativeError = 8180
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared.
解决方案 »
- 这样的数据如何更新?
- 关于count()和count*有啥区别
- 取出当月的数据怎么取??
- 请教SQL脚本的高手,如何给我们网站的会员系统的USER表通过执行SQL脚本增加生成1000系随机的用户ID和密码呢?
- 分不够在加----DBF类型的数据库用什么软件能打开!
- 这个插入的语句该怎么写呢?
- 一个sql安装问题,哪位大虾指点以下。急,在线等。
- 百分求解,MS SQL导入ACCESS后ID字段怎么办?
- 新建SQL Server注册失败!急问!
- 最简单的问题(为什么还问?我不会:( ...)要关联两个表,第二个怎么做啊?
- 关于update 问题 急!
- Microsoft Visual Studio 2005 能在linux下运行么?
英文系统下安装的Sql Server2000的排序规则选择为Latin1_General_BIN,
现有1个数据库A,创建时未指定排序规则,其中有1个数据表B,其中的varchar字段创建时也未指定排序规则。
这个表B建立了视图C,其中,对Varchar字段使用了replace函数。
用bcp.exe导出数据时,在中文系统下没有问题,但是在英文系统下会报排序规则冲突。
请问会是什么原因?沒指定時,字段排序為數據庫的默認排序規則排序對條件會有影響。。可通過指定排序規序來處理 collate 排序規則
因为是用安装盘安装的数据库A,而所谓安装其实是在编译服务器上生成数据库,然后备份数据库,
在目的服务器上恢复。因为编译机器是中文的,其Sql Server的实例是Chinese_PRC_BIN,数据库A的排序规则没有指定,
所以是默认,也是Chinese_PRC_BIN。现在在英文系统上“安装(其实是恢复)”数据库A,这样,数据库A的排序规则还是Chinese_PRC_BIN,
数据表B的varchar字段C的排序规则也是数据库A的默认排序规则(即Chinese_PRC_BIN)
而因为英文系统的实例是Latin1_General_BIN,所以在使用内部函数Replace(字段C, ':', '&')时发生规则冲突.这里想确认一下:
1)在英文系统上修改字段C的排序规则为Latin1_General_BIN,则问题解决了。
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN)
2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法?
谢谢
那是否说明Replace内部函数是根据master数据库的排序规则来的(master数据库的排序规则是Latin1_General_BIN) --不是,是根据你当前数据库建立的时候指定的排序规则,但是,通常情况下,如果用户在创建数据库是没有指定对应的规则的话,
--那么默认使用的就是master数据库的排序规则.2)Replace(字段C, ':', '&'),如果不修改字段C的排序规则,还有没有其他的解决方法? -- 在字段上加入 ColumnName collate Latin1_General_BIN 试试,
-- 具体例子在你另外一个帖子里面
[EndTime] [VARCHAR](100) COLLATE Latin1_General_BIN NOT NULL, 试试
1
不是
2
不改变列的排序规则(表结构中),但在操作时指定排序规则
比如:
select * from tb where name collate Latin1_General_BIN ='aa'
>>在同一db下面你的 bcp 导出的时候, 查询没有指定库名, 你登录的用户设置的默认数据库是什么?
>>查询没有指定库名是我贴漏了。贴上来的时候将其他无关的都删除了,可能删多了。
使用的用户名设置的默认数据库是master。
不过我即使修改了指定的数据库,还是一样的错误。
现在最大的问题是REPLACE(A字段,':','&')报排序规则错误。
此处如果显示指定一个排序规则,譬如REPLACE(A字段,':','&' COLLATE Chinese_PRC_BIN)
或者REPLACE(A字段,':','&' COLLATE Latin1_General_BIN)
结果都是好的。 此外,如果不用view,单单将创建视图的Sql语句导出,譬如:
C:\...\bcp.exe "Select replace(A字段,':','&') as 'starttime' ...." queryout ....
则是没有问题的。
这个也很奇怪。
譬如:Select ... From db1.table1 where field1='aaa'
我看帮助里有些例子是指定排序规则的:
Select ... From db1.table1 where field1='aaa' collate Latin1_General_BIN