用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > sqlserver教程

修改用户定义的数据类型

时间:2014-11-30  来源:互联网  作者:佚名

--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)'

来顶一下
返回首页
返回首页
推荐资讯
从零开始学ASP.NET-基础篇第1/7页 从零开始学ASP.NET-基础篇第1/7页第一天 学习目的: 掌握最基本的Label、TextBox、Button控件
ASP.NET入门数据篇 ASP.NET入门数据篇对于网站编程的初学者来说,总是会上网找些源码来看,但久而
相关文章
    无相关信息
栏目更新
栏目热门