批量将一个库里的所有表里的char改成nchar类型
发表于:2007-07-02来源:作者:点击数:
标签:
/*--将所有的表中,数值类型由char,varchar改为nchar,nvarchar 的存储过程--*/ /*--调用示例: exec p_set --*/ if exists (select * from dbo.sysobjects where id = object_id(N@#[dbo].[p_set]@#) and OBJECTPROPERTY(id, N@#IsProcedure@#) = 1) drop proce
/*--将所有的表中,数值类型由char,varchar改为nchar,nvarchar 的存储过程--*/
/*--调用示例:
exec p_set
--*/
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
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
原文转自:http://www.ltesting.net