䶮字 在数据库中 必须  用 nvarchar  类型 才能正常显示

可数据库原来 是 varchar  ,怎么办,换 nvarchar

然后  update table set bb = N'䶮'

数据库设计时  有中文的 还是 用 nvarchar   方便扩展

USE [table]
GO
/****** 对象:  StoredProcedure [dbo].[p_changevar2nvar]    脚本日期: 10/12/2019 11:21:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create procedure [dbo].[p_changevar2nvar](@tablename varchar(100),@column varchar(100))
asdeclare @i int;
declare @tbName varchar(100);
declare @DFName varchar(100);
declare @SqlStr1 varchar(8000);
declare @SqlStr2 varchar(8000);
declare @SqlStr3 varchar(8000);WITH tx AS(
SELECT a.object_id,b.name AS schema_name,a.name AS table_name,c.name as ix_name,c.is_unique AS ix_unique,c.type_desc AS ix_type_desc,d.index_column_id,d.is_included_column,e.name AS column_name,f.name AS fg_name,d.is_descending_key AS is_descending_key,c.is_primary_key,c.is_unique_constraintFROM sys.tables AS aINNER JOIN sys.schemas AS b            ON a.schema_id = b.schema_id AND a.is_ms_shipped = 0INNER JOIN sys.indexes AS c            ON a.object_id = c.object_idINNER JOIN sys.index_columns AS d      ON d.object_id = c.object_id AND d.index_id = c.index_idINNER JOIN sys.columns AS e            ON e.object_id = d.object_id AND e.column_id = d.column_idINNER JOIN sys.data_spaces AS f        ON f.data_space_id = c.data_space_idwhere a.name = @tablename
)
SELECTDrop_Index   = CASE WHEN (a.is_primary_key = 1 OR a.is_unique_constraint = 1)THEN 'ALTER TABLE ' + a.table_name + ' DROP CONSTRAINT ' + a.ix_nameELSE 'DROP INDEX ' + a.ix_name collate SQL_Latin1_General_CP1_CI_AS + ' ON ' + a.schema_name + '.' + a.table_name  END,Create_Index = CASE WHEN (a.is_primary_key = 1 OR a.is_unique_constraint = 1)THEN 'ALTER TABLE ' + a.table_name + ' ADD CONSTRAINT ' + a.ix_name + CASE WHEN a.is_primary_key = 1 THEN ' PRIMARY KEY' ELSE ' UNIQUE' END + '(' + indexColumns.ix_index_column_name + ')'ELSE 'CREATE ' + CASE WHEN a.ix_unique = 1 THEN 'UNIQUE ' ELSE '' END + a.ix_type_desc + ' INDEX ' + a.ix_name collate SQL_Latin1_General_CP1_CI_AS + ' ON ' + a.schema_name+ '.' + a.table_name + '(' + indexColumns.ix_index_column_name + ')'+ CASE WHEN IncludeIndex.ix_included_column_name IS NOT NULL THEN ' INCLUDE (' + IncludeIndex.ix_included_column_name + ')' ELSE '' END+ ' ON [' + a.fg_name +']' END,CASE WHEN a.ix_unique = 1 THEN 'UNIQUE' END AS ix_unique,a.ix_type_desc,a.ix_name,a.schema_name,a.table_name,indexColumns.ix_index_column_name,IncludeIndex.ix_included_column_name,a.fg_name,a.is_primary_key,a.is_unique_constraint  into #tmptb1
FROM
(SELECT DISTINCTix_unique,ix_type_desc,ix_name,schema_name,table_name,fg_name,is_primary_key,is_unique_constraintFROM tx
) AS a
OUTER APPLY
(SELECT ix_index_column_name= STUFF((SELECT ',' + column_name + CASE WHEN is_descending_key = 1 THEN ' DESC' ELSE '' ENDFROM tx AS bWHERE schema_name = a.schema_nameAND table_name=a.table_nameAND ix_name=a.ix_nameAND ix_type_desc=a.ix_type_descAND fg_name=a.fg_nameAND is_included_column=0ORDER BY index_column_idFOR XML PATH('')),1,1,'')
)IndexColumns
OUTER APPLY
(SELECT ix_included_column_name= STUFF((SELECT ',' + column_nameFROM tx AS bWHERE schema_name = a.schema_nameAND table_name=a.table_nameAND ix_name=a.ix_nameAND ix_type_desc=a.ix_type_descAND fg_name=a.fg_nameAND is_included_column=1ORDER BY index_column_idFOR XML PATH('')), 1,1,'')
)IncludeIndex
ORDER BY a.schema_name,a.table_name,a.ix_name;
/****临时表#tmptb1增加ID项****/
alter table #tmptb1 add id int identity(1,1);
/****先删除所有主键与索引****/
set @i=1
while @i<=(select Max(id) from #tmptb1)
beginselect @tbName=table_name,@SqlStr1=Drop_Index from #tmptb1 where id=@iprint '删除所有主键与索引:'+@tbNameif @SqlStr1<>''exec(@SqlStr1)set @i=@i+1
end;
/****获取默认值约束及更改字段类型语句****/
SELECT d.Name as tbName,'DF_'+d.name+'_'+a.name as DFName,case when ISNULL(SM.text,'')<>'' then 'alter table '+d.name+' drop constraint '+(select f.name from syscolumns e,sysobjects f where e.id=object_id(d.name) and f.id=e.cdefault and e.name=a.name and f.name like 'DF%')else '' end as 删除约束,'alter table ['+d.name+'] alter column ['+a.name+'] n'+b.name+'('+cast((case when a.length>4000 then 4000 else a.length end) as varchar)+')'+case when a.IsNullable = 0 then ' NOT NULL' else '' end as 更新字段,case when ISNULL(SM.text,'')<>'' then 'if not exists(select f.name from syscolumns e,sysobjects f '+'where e.id=object_id('''+d.name+''') and f.id=e.cdefault and f.name=''DF_'+d.name+'_'+a.name+''') '+'ALTER TABLE '+d.name+' ADD CONSTRAINT DF_'+d.name+'_'+a.name+' DEFAULT '+ISNULL(SM.text,'')+' FOR '+a.name else '' end as 增加默认值 into #tmptb2
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
LEFT JOIN dbo.syscomments SM ON a.cdefault = SM.id
inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
where d.name = @tablename and a.name = @column
and b.name in('varchar') and not exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) --主键不能修改
order by d.name,a.name;/****临时表#tmptb2增加ID项****/
alter table #tmptb2 add id int identity(1,1);
/****删除默认值约束,更新字段,重新创建默认值****/
set @i=1;
while @i<=(select Max(id) from #tmptb2)
beginselect @tbName=tbName,@DFName=DFName,@SqlStr1=删除约束,@SqlStr2=更新字段,@SqlStr3=增加默认值 from #tmptb2 where id=@i;print '删除默认值约束,更新字段,重新创建默认值:'+@tbName+' | '+@DFName;--begin tranexec('alter table ['+@tbname+'] nocheck constraint all');if @SqlStr1<>''exec(@SqlStr1);if @SqlStr2<>''exec(@SqlStr2);if @SqlStr3<>''exec(@SqlStr3);exec('alter table ['+@tbname+'] check constraint all');set @i=@i+1;
end;
/****重键主键及索引****/
set @i=1;
while @i<=(select Max(id) from #tmptb1)
beginselect @tbName=table_name,@SqlStr1=Create_Index from #tmptb1 where id=@i;print '重键主键及索引:'+@tbName;--begin tran--exec('alter table ['+@tbname+'] nocheck constraint all')if @SqlStr1<>''exec(@SqlStr1);--exec('alter table ['+@tbname+'] check constraint all')set @i=@i+1;
end;
/*
if @@error>0
beginrollback tran
end else
begincommit tran
end
*/
/****删除临时表****/
drop table #tmptb1;
drop table #tmptb2;

sqlserver 2008 varchar字段 转 nvarchar 存储过程相关推荐

  1. 了解SQLServer中varchar(max)、nvarchar(max)和varbinary(max)

    了解SQLServer中varchar(max).nvarchar(max)和varbinary(max) 转载于:http://www.poorren.com/sqlserver-2005-varc ...

  2. 使用SQLServer 2008的CDC功能实现数据变更捕获

    原文: 使用SQLServer 2008的CDC功能实现数据变更捕获 最近由于工作需要,研究了一下2008 CDC功能,觉得还不错,下面整理了一下研究过程,虽然比较粗略,但是基本上能用了,如果有补充请 ...

  3. SqlServer 2008 R2定时备份数据库,并且发送邮件通知

    SqlServer 2008 R2定时备份数据库,并且发送邮件通知 原文:SqlServer 2008 R2定时备份数据库,并且发送邮件通知 先配置数据库的邮件设置,这样才可以发送邮件. 2. 3. ...

  4. 使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型代替text、ntext 和 image 数据类型...

    Microsoft SQL Server 2005 中引入了 max 说明符.此说明符增强了 varchar.nvarchar 和 varbinary 数据类型的存储能力.varchar(max).n ...

  5. SQLServer 2008 :error 40 出现连接错误

    在与SQLServer建立连接时出现与网络相关的或特定与实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且SQL SERVER已配置允许远程链接.(provide:命名管道提供程序,err ...

  6. 关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别

    一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...

  7. mysql char null_关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别...

    一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...

  8. win2008 mysql端口_Win7系统下SqlServer 2008修改IP端口的方法

    当我们在win7系统中使用SqlServer 2008连接数据库的时候,发现需要使用连接数据库ip端口,可是许多win732位系统用户并不知道SqlServer 2008怎么修改IP端口,想必有很多人 ...

  9. MySQL中TEXT数据类型的最大长度___MySQL VARCHAR字段最大长度究竟是多少

    MySQL TEXT数据类型的最大长度 TINYTEXT 256 bytes TEXT 65,535 bytes ~64kb MEDIUMTEXT 16,777,215 bytes ~16MB LON ...

最新文章

  1. JAVA设计模式(09):结构型-代理模式(Proxy)
  2. Matlab中的CVX工具包安装
  3. zip() python
  4. OpenGL:ImGUI在GLFW库和GLAD/GLEW库的环境下使用
  5. CPU 的 ring0、ring1、ring2、ring3
  6. c# 获取html中指定标签信息,c# – 如何解析图像标签的HTML字符串以获取SRC信息?...
  7. 【CodeForces - 580D】Kefa and Dishes (状压dp)
  8. js php 中文乱码怎么解决_php中文乱码怎么解决
  9. 程序员技能与成长:程序员的必备工具箱(值得收藏)
  10. Vue错误 Module not found:Error:Can‘t resolve ‘vue/types/umd‘ in ......
  11. 杭电计算机考研比率,杭州电子科技大学考研的难度大吗
  12. easy_ui之搭建后台界面(一)
  13. mysql导入excel文件_将Excel数据导入MySQL
  14. ML-Agents训练智能AI使用技巧
  15. 目前最火热的创新创业项目有哪些?
  16. iRingg 1.0.48 iPhone铃声制作
  17. Tik Tok跨境:不会英语可以做TikTok吗?
  18. 例子4.11 从键盘输入一个大写字母,要求改用小写字母输出
  19. 编程方式操作WorkFlow
  20. 王者荣耀服务器维护公告5月8号,王者荣耀5月8日更新维护公告 5.8更新了什么

热门文章

  1. python爬虫:利用多线程爬虫爬取下载进击的巨人图片
  2. IDEA运行项目提示找不到程序包
  3. EasyPoi导入导出(一)
  4. An Introduction for IMU 3 - 无线IMU系统设计
  5. Android常用设计模式
  6. 实现打印当前路径下所有文件名的命令_Linux 命令(二)
  7. 进程计划和计划任务管理
  8. HTML显示日期时间代码 - [js 特效代码]
  9. 小学计算机教案免费版,大连理工大学版小学信息技术教案
  10. 地产巨头,数据一体化建设项目方案(拿走不谢)