起因:因为SqlServer 数据库不支持varchar 类型写入 韩文多语言 。
解决方式:修改varchar类型为 nvarchar 类型 ,nvarchar类型是占用两个字节,
其他问题:
1.SqlServer的主键最多900字节,所以不能将主键索引扩大,需要缩短主键长度。
2.text类型修改为ntext 需要先修改为nvarchar 才能 修改为ntext类型
sql 如下:
DECLARE @name nvarchar(100)
DECLARE @fieldName nvarchar(100)
DECLARE @fieldType nvarchar(100)
DECLARE @leng int
DECLARE @nums int
set @nums=0
DECLARE CURSOR1 CURSOR SCROLL for (select name from sysobjects where xtype = 'u') ---u 表 V 视图 P 函数
OPEN CURSOR1
fetch FIRST from CURSOR1 into @name
WHILE (@@FETCH_STATUS=0)
BEGIN
DECLARE cursor2 CURSOR SCROLL for (
select syscolumns.name as fieldName ,systypes.name as fieldType,syscolumns.length as leng
from syscolumns inner join systypes on systypes.xtype=syscolumns.xtype
where id=(select id from sysobjects where name=@name) and syscolumns.name like '%digest%' --and systypes.name ='nvarchar'
) ---要查询的类型
OPEN CURSOR2
fetch FIRST from CURSOR2 into @fieldName,@fieldType,@leng
WHILE (@@FETCH_STATUS=0)
BEGIN
BEGIN try
set @nums=@nums+1
-- BEGIN
---- EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar(100)')---更改类型
-- EXECUTE('alter table '+@name+' alter column '+@fieldName+' ntext')
print (@NAME+' '+@fieldName+' '+@fieldType)
EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar('+@leng+')')
set @nums=@nums+1
-- END
end try
BEGIN catch
print (@NAME+' '+@fieldName+' '+@fieldType)
set @nums=@nums+1
fetch next from CURSOR2 into @fieldName,@fieldType,@leng
END catch
fetch next from CURSOR2 into @fieldName,@fieldType,@leng
end
close CURSOR2
deallocate CURSOR2
fetch next from CURSOR1 into @name
end
close CURSOR1
deallocate CURSOR1
print @nums