explicit value specified for identity field in table 'xx' when 'SET IDENTITY_INSERT' is OFF

sybase数据库插入数错

explicit value specified for identity field in table 'xx' when 'SET IDENTITY_INSERT' is OFF

这是因为‍使用sybase时将id字段设置为identity属性,即为自增。

解决方法:

‍使用命令即可:set IDENTITY_INSERT on

解释:‍

1、set IDENTITY_INSERT on和off 的设置 (如何自增字段中插入指定值)
批量插入记录时,对有标识列的字段要设置 set IDENTITY_INSERT 表名 on,然后再执行插入记录操作;插入完毕后恢复为off 设置.

2、格式: 
set IDENTITY_INSERT 表名 on 
set IDENTITY_INSERT 表名 off

3、举例:

set IDENTITY_INSERT peoplePworkpositiontype on 

‍‍‍insert into transfer1683call (id,called,tel,name) values(324,'168','010','金曲) 
insert into transfer1683call (id,called,tel,name) values(325,'168','010','摩登) 
insert into transfer1683call (id,called,tel,name) values(326,'168','010','财富) 
insert into transfer1683call (id,called,tel,name) values(327,'168','010','方言) 
insert into transfer1683call (id,called,tel,name) values(328,'168','010','语音) 
set IDENTITY_INSERT peoplePworkpositiontype off

建议

如果没有必要,插入值的时候不要给ID字段赋值,而由服务器自动赋值.

Sybase 中文乱码解决办法
解决Sybase中文问题 
(http://blog.csdn.net/kingspider/) 
(http://blog.sina.com.cn/u/1163490885) 

1.     JDBC连接串要有字符集设置 
jdbc:sybase:Tds:192.168.3.11:5000/Wfis_db?charset=cp936 

2.     服务器配置成cp936 
(1)    使用isql查看当前已经安装的字符集 
isql -Usa -Plongtop 
>use master 
>go 
>select id,name from syscharsets 
>go 
id name 
--- ---------------- 
   0 ascii_8 
   1 iso_1 
   2 cp850 
20 defaultml 
21 thaidict 
22 iso14651 
24 utf8bin 
25 binary 
39 altnoacc 
45 altdict 
46 altnocsp 
47 scandict 
48 scannocp 
50 bin_iso_1 
50 bin_cp850 
51 dict 
52 nocase 
53 nocasep 
54 noaccent 
55 espdict 
56 espnocs 
57 espnoac 
59 rusnocs 
64 cyrnocs 
65 elldict 
69 hundict 
70 hunnoac 
71 hunnocs 
73 turknoac 
74 turknocs 
129 cp932bin 
130 dynix 
137 gb2312bn 
140 cyrdict 
155 turdict 
161 euckscbn 
163 gbpinyin 
165 rusdict 
179 sjisbin 
192 eucjisbn 
194 big5bin 

(41 rows affected) 
从列表中看出没有安装cp936字符集 

(2)    查看当前使用的缺省字符集 
>sp_configure "default char" 
>go 
Parameter Name                 Default     Memory Used Config Value 
         Run Value   Unit                 Type 
------------------------------ ----------- ----------- ------------ 
         ----------- -------------------- ---------- 
default character set id                 2           0           2 
                   2 id                   static 

缺省字符集的id是2,查看上面的列表,可以得知是cp850 

(3)    因为上面的列表中没有安装cp936,所以就安装cp936字符集 
进入目录C:\sybase\charsets\cp936 
运行命令 charset -Usa -P123456 binary.srt cp936 
运行完成后,系统就安装了cp936字符集 
其中-P后面123456是密码
(4)    验证是否确实安装了cp936字符集 
isql -Usa -Plongtop 
>use master 
>go 
>select id,name from syscharsets 
>go 
id name 
--- ------------------------------ 
   0 ascii_8 
   1 iso_1 
   2 cp850 
20 defaultml 
21 thaidict 
22 iso14651 
24 utf8bin 
25 binary 
39 altnoacc 
45 altdict 
46 altnocsp 
47 scandict 
48 scannocp 
50 bin_iso_1 
50 bin_cp850 
50 bin_cp936 
51 dict 
52 nocase 
53 nocasep 
54 noaccent 
55 espdict 
56 espnocs 
57 espnoac 
59 rusnocs 
64 cyrnocs 
65 elldict 
69 hundict 
70 hunnoac 
71 hunnocs 
73 turknoac 
74 turknocs 
129 cp932bin 
130 dynix 
137 gb2312bn 
140 cyrdict 
155 turdict 
161 euckscbn 
163 gbpinyin 
165 rusdict 
171 cp936 
179 sjisbin 
192 eucjisbn 
194 big5bin 

(43 rows affected) 
从列表中可以发现已经安装了cp936,id是171 

(5)    把系统的当前缺省字符集设置为cp936
 
需要先设置sortorder,sp_configure “default sortorder id”,50.

>sp_configure "default char",171 
>go 
In changing the default sort order, you have also reconfigured SQL Server's 
default character set. 
Parameter Name                 Default     Memory Used Config Value 
         Run Value   Unit                 Type 
------------------------------ ----------- ----------- ------------ 
         ----------- -------------------- ---------- 
default character set id                 2           0         171 
                   2 id                   static 

(1 row affected) 
Configuration option changed. Since the option is static, Adaptive Server must 
be rebooted in order for the change to take effect. 
Changing the value of 'default character set id' to '171' increases the amount 
of memory ASE uses by 6 K. 
(return status = 0) 

(6)    重启Sybase服务,使更改生效
shutdown 
第一次重启,系统会对已经存在的数据进行转换,转换完成后自动停止服务,只要再次启动服务就可以了。 

(7)    更改DB客户端的字符集 
DBArtisan中要更改客户端的字符集为cp936才能连接cp936的服务器 
通过菜单\Logfile\Options...打开对话框,选择Connection标签, 
更改Client Character输入框的值为cp936。 

数据库的charset修改为cp936时,使用isql按如下的方式 
isql -Usa -Plongtop -Sdbserver -Jcp936
 
 
 
 

Sybase 中文乱码是由于默认的编码集为ISO-1 ,在Sybase Central v4.3中中文显示为乱码,将字符集改成CP936或者CP850后,中文乱码解决。

更换字符集方法:

一、打开Sybase Central 连接上数据库,打开master数据库的syscharsets表,查看name列里面有没有CP936数据,如果没有,进入步骤二;如果有,操作步骤三。

 

二、运行 --> CMD 进入DOS窗口命令提示,进入目录 D:\sybase\charsets\cp936 (这是我的Sybase安装目录),输入命令 charset -Usa -P -S binary.srt cp936  

 

三、按步骤一,打开master数据库的syscharsets表,查看name列CP936对应的id应该是171,在左边数据库服务器名上点(我的服务器名为GZLCL)“右键-->属性  --> 服务器配置 ”在“显示配置参数”中选择 “Langguages” ,“default character set id"填写171 ,“确定” 然后重新启动服务。

 

四、配置locales.dat文件:文件路径为D:\sybase\locales\locales.dat  用记事本打开 找到 “[NT]”  将其默认字符集改为locale = default, us_english, cp936 

 

这样在Sybase Central 里面中文乱码就可以解决了。 


你可能感兴趣的:(explicit value specified for identity field in table 'xx' when 'SET IDENTITY_INSERT' is OFF)