·您的位置: 首页 » 资源教程 » 编程开发 » 数据库 » 修改用户定义的数据类型

修改用户定义的数据类型

类别: 数据库教程  评论数:0 总得分:0
--SQLSERVER的自定义类型比较好用吧,但是,一旦引用该数据类型后,想修改数据类型,就是一大头疼的事了,本存储过程就是专门对付它的。

--sp_rebuildallview 见本BLOG中的其它页面
create procedure sp_rechangfieldtype(@typename varchar(50), @newtype varchar(50))
as
begin

declare @typeid int
declare @tablename varchar(50)
declare @column varchar(50)

declare @sqlstr varchar(200)
declare @defaultid int


select @typeid = xusertype
from systypes
where name = @typename and xusertype > 256
AND (is_member(\'db_owner\') = 1 OR is_member(\'db_ddladmin\') = 1 OR is_member(user_name(uid))=1)

declare mycursor cursor for
select o.name, c.name, c.cdefault
from syscolumns c, systypes t, sysusers u, sysobjects o
where c.xusertype = @typeid
and t.xusertype = @typeid
and o.uid = u.uid
and c.id = o.id
and o.type = \'u\'

open mycursor
fetch next from mycursor into @tablename, @column, @defaultid
while @@fetch_status = 0
begin
if @defaultid <> 0
begin
set @sqlstr = \'alter table \' + @tablename + \' drop \' + object_name(@defaultid)
exec(@sqlstr)

set @sqlstr = \'alter table \' + @tablename + \' alter column \' + @column + \' \' + @newtype
exec(@sqlstr)

-- set @sqlstr = \'alter table \' + @tablename + \' add contraint \' + @tablename + \'df\'+@column + \' default 0\'

end
else
begin
set @sqlstr = \'alter table \' + @tablename + \' alter column \' + @column + \' \' + @newtype

print @sqlstr
exec(@sqlstr)
end
--if @@error <> 0
-- continue
fetch next from mycursor into @tablename, @column, @defaultid
end
--如果没有约束,则可以直接删除。如果有约束。先处理约束。

close mycursor
deallocate mycursor

end

GO

create procedure SP_CHANGEFIELD(@OLDTYPENAME VARCHAR(50), @NEWDTYPE VARCHAR(50))
as
begin

exec(\'sp_addtype U_LOCALTYPE, \'\'\' + @newdtype + \'\'\'\')

exec SP_rechangfieldtype @OLDTYPENAME, \'U_LOCALTYPE\'

EXEC sp_rebuildallview

EXEC(\'sp_droptype \' + @OLDTYPENAME)

EXEC(\'sp_addtype \' + @OLDTYPENAME + \', \'\'\' + @newdtype + \'\'\'\')

exec SP_rechangfieldtype \'U_LOCALTYPE\', @OLDTYPENAME

EXEC sp_rebuildallview

EXEC sp_droptype \'U_LOCALTYPE\'

end
GO

--以下是示例。将U_HELLO的长度改为 30

SP_ADDTYPE U_HELLO, \'VARCHAR(10)\'

GO
CREATE TABLE TESTTYPE(NAME U_HELLO)
GO

SP_CHANGEFIELD \'U_HELLO\', \'VARCHAR(30)\'
-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1