如何批量更改数据库所有表中VarChar类型的字段为nVarChar类型

Garfield007 2004-08-11 09:07:41
我的Database里面有很多字段类型是VarChar,现在必须批量更改为nVarChar,如果用Alter Table又不知道怎么如何一次选择、更改数据库里所有的表,请问如何用脚本实现?在线等,谢谢各位:)
...全文
538 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garfield007 2004-08-11
  • 打赏
  • 举报
回复
好!那明天我再去试试:)我先结贴了,不懂的明天再问,谢谢哦:)
zjcxc 2004-08-11
  • 打赏
  • 举报
回复
那个太简单了一点,与这个处理要求不一样
Garfield007 2004-08-11
  • 打赏
  • 举报
回复
哇,想不到有个名人来回答我的问题,真荣幸:)谢谢:)呵呵
那这个http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39250277,00.htm里面说的方法能够套用吗?你的代码我不能完全看懂啊:(
zjcxc 2004-08-11
  • 打赏
  • 举报
回复
SQL中没有批量修改的语句,你只能像我上面那样,自己写语句来完成批量修改.

但要注意,字段如果有约束的话,是不能通过上述语句完成修改的,这种情况就需要你把不能修改的记录下来,自己手工修改了.
zjcxc 2004-08-11
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_set]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_set]
GO

/*--将所有的表中,数值类型由char,varchar改为nchar,nvarchar

--*/

/*--调用示例:
exec p_set
--*/
--修改的存储过程
create procedure p_set
as
declare tb cursor for
SELECT sql='alter table ['+d.name
+'] alter column ['+a.name+'] n'
+b.name+'('+cast(a.length*2 as varchar)+')'
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where
b.name in('char','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

declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb into @sql
end
close tb
deallocate tb
go
lalakid 2004-08-11
  • 打赏
  • 举报
回复
顶一下……
期待ING

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧