解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar。

操作说明:打开SQL Server Management Studio,选中你要更新字段类型的数据库,点新建查询菜单,执行下面的语句即可。

详细代码:

--批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
declare @TableName nvarchar(255) --定义数据表名变量
declare @ColumnName nvarchar(255) --定义字段名处变量
declare @ConstraintName varchar (250)--定义当前查询的约束变量

declare @cllength nvarchar(8) --定义字段长度变量
declare @tyname nvarchar(255) --定义字段类型变量
declare @Sql nvarchar(2000) --定义循环执行SQL语句

declare mycursor1 cursor fast_forward for select a.name as tbname,b.name as clname, b.prec as cllength, c.name as tpname from sysobjects a inner join syscolumns b on b.id=a.id and a.type='U' inner join systypes c on b.xusertype=c.xusertype where a.xtype='U' and (c.name='char' or c.name='nchar') --定义一个游标对象

open mycursor1 --打开游标
fetch next from mycursor1 into @TableName,@ColumnName,@cllength,@tyname--取数据到临时变量
while @@fetch_status = 0 --系统@@fetch_status = 0 时循环结束
begin
--1删除指定数据表指定字段对应的所有约束

--声明读取数据表中指定字段对应的所有约束列表游标
 declare mycursor2 cursor for select name from sysobjects left join sysconstraints on sysconstraints.constid=sysobjects.id where parent_obj=OBJECT_ID(''+@TableName+'') and colid=(select colid from syscolumns where id=OBJECT_ID(''+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1 and upper(name)=upper(@ColumnName))
 --打开游标
 open mycursor2
 --从游标里取出数据赋值到主键约束名称变量中
 fetch next from mycursor2 into @ConstraintName
 --如果游标执行成功 
 while (@@fetch_status=0)
 begin
 --删除当前找到的约束
 print '当前删除语句'+'ALTER TABLE ['+@TableName+'] DROP CONSTRAINT ['+@ConstraintName+']'
 exec ('ALTER TABLE ['+@TableName+'] DROP CONSTRAINT ['+@ConstraintName+']')
 --print '已成功删除数据表['+@TableName+']字段['+@ColumnName+']对应的约束['+@ConstraintName+']'
 --用游标去取下一条记录
 fetch next from mycursor2 into @ConstraintName
 end
 --关闭游标
 close mycursor2 
 --撤销游标
 deallocate mycursor2

--2循环执行更新字段语句
set @Sql = 'alter table ['+@TableName+'] alter column ['+ @ColumnName +'] nvarchar('+@cllength+');'--定义当前更新字段类型执行语句
execute(@Sql);
print '当更新语句'+@Sql
fetch next from mycursor1 into @TableName,@ColumnName,@cllength,@tyname --再次取值
end

close mycursor1 --关闭游标
deallocate mycursor1 --删除游标

批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本的更多相关文章

  1. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  2. Oracle使用游标删除所有用户数据表中的所有记录脚本

    应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自 ...

  3. 转:Sql Server中清空所有数据表中的记录

    如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍.   使用sql删除数据库中所有表是不难的 ...

  4. Sql Server中清空所有数据表中的记录

    Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable  @Command1 ='truncate table ?'删除所有数据 ...

  5. 【MySQL】MySQL中查询出数据表中存在重复的值list

    1.目的:查询MySQL数据表中,重复记录的值 2.示例: 3.代码: select serial_num,count(*) as count FROM card_ticket GROUP BY se ...

  6. Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”

    create or replace function mcode_apply_update_personnel(p_mca_no VARCHAR2, -- 参数(实参) p_action VARCHA ...

  7. 帝国cms插件 一键替换数据表中已发表文章的内容关键字

    你是不是也在优化网站,是不是网站发展了一段时间之后才来做优化的,这样当然就会导致已经发表文章里的内容关键字,不能得到替换了! 小编根据后台替换内容关键字的程序,重写了一段 通过运行单个页面就能直接替换 ...

  8. 深入理解 WordPress 数据库中的用户数据 wp_user

    WordPress 使用 wp_users 数据表存储用户的主要数据,该数据表结构类似于wp_posts 和 wp_comments 数据表,存储的是需要经常访问的用户数据,该数据表的结构以及该数据表 ...

  9. SpringBoot集成mybatis,同时读取一个数据库中多个数据表

    SpringBoot集成mybatis,同时读取一个数据库中多个数据表: application.properties: mybatis.config-location=classpath:mybat ...

随机推荐

  1. 学习ASP.NET Core Razor 编程系列七——修改列表页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  2. 全网代理公开ip爬取(隐藏元素混淆+端口加密)

    简述 本次要爬取的网站是全网代理,貌似还是代理ip类网站中比较有名的几个之一,其官网地址: http://www.goubanjia.com/. 对于这个网站的爬取是属于比较悲剧的,因为很久之前就写好 ...

  3. AC的故事大结局山寨版(下)(最大流)

    福建工程学院第十二届ACM程序设计大赛真题 AC的故事大结局山寨版(下) TimeLimit:2000MS  MemoryLimit:128MB 64-bit integer IO format:%l ...

  4. 操作系统内核Hack:(三)引导程序制作

    操作系统内核Hack:(三)引导程序制作 关于本文涉及到的完整源码请参考MiniOS的v1_bootloader分支. 1.制作方法 现在我们已经了解了关于BootLoader的一切知识,让我们开始动 ...

  5. Bootstrap3 排版-内联文本元素

    标记文本 突出显示的文本由于其相关性在另一个上下文中,使用<mark>标记. You can use the mark tag to highlight text. You can use ...

  6. 排查Full GC

    我们的Java应用因频繁FULL GC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下: 4.758: [Full GC [ ...

  7. 【Unity Shader】Unity Chan的卡通材质

    写在前面 时隔两个月我终于来更新博客了,之前一直在学东西,做一些项目,感觉没什么可以分享的就一直没写.本来之前打算写云彩渲染或是Compute Shader的,觉得时间比较长所以打算先写个简单的. 今 ...

  8. Mac状态栏wifi图标一直闪烁重复连接但是网络正常的解决办法

    本猫的系统是EI(10.11.6),不知从哪个版本开始(至少是升级到EI之后),状态栏上的wifi图标一直闪烁,这应该是表示正在连接网络.但是网络是正常的! 虽说闪烁的wifi图标不影响使用,但是有强 ...

  9. SpringMVC源码分析--文件上传

    SpringMVC提供了文件上传的功能,接下来我们就简单了解一下SpringMVC文件上传的开发及大致过程. 首先需要在springMVC的配置文件中配置文件上传解析器 <bean id=&qu ...

  10. 生活沉思录 via 哲理小故事

    本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛, ...