解决问题:字段类型为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. Python小代码_7_字符串的字符次数统计

    生成包含 1000 个随机字符的字符串,并统计每个字符出现的次数. import string import random #获取字符 x = string.ascii_letters + strin ...

  2. AIX 命令

    1,[ctrl]+h 删除命令 2, set -o emacs后: [ctrl]+p 看上条命令 [ctrl]+n 看下条命令 两次[esc] 自动补全 3, set -o vi 后,可以按照vi编辑 ...

  3. delphi 给EXE文件增加区段

    学习 PE 可执行文件格式,用 delphi 实现给 EXE 文件增加区段 源码下载(StudyPE.zip) unit uStudyPE; interface uses Classes, SysUt ...

  4. C++框架_之Qt的窗口部件系统的详解-上

    C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...

  5. ACM Misha and Changing Handles

    Misha hacked the Codeforces site. Then he decided to let all the users change their handles. A user ...

  6. [OpenCV] Write & Read files

    例如写 KeyPoint向量,以及他的描述矩阵. // ... vector<KeyPoint> key_points; Mat descriptors; // ... fs.open(o ...

  7. J2EE中MVC的各层的设计原则及其编写注意事项

    总结了下J2EE的MVC模式开发原则,很多细节处理好了是很有利于开发与维护的. 下面就从各层说起. 视图层 主要是客户端的显示,主要是JSP和HTML,随着Web的不断发展,许多基于Javascrip ...

  8. 有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是要求线性空间和线性时间。

    int findMaxDifBt2Nums(int* arr, int len) { int maxItem = arr[0], minItem = arr[0]; for (int i = 1; i ...

  9. Freemarker 浅析

    今天分享一下一个模板语言的使用,它就是Freemarker,有点类似与前些日子做Python的Django中的模板语言,其实原理上都是相似的.所以这里就不对那些基础性的语法类的直至进行讲解了,就拿几个 ...

  10. 学习TensorFlow,TensorBoard可视化网络结构和参数

    在学习深度网络框架的过程中,我们发现一个问题,就是如何输出各层网络参数,用于更好地理解,调试和优化网络?针对这个问题,TensorFlow开发了一个特别有用的可视化工具包:TensorBoard,既可 ...