快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

修改用户定义的数据类型

--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)\\\'
返回类别: 教程
上一教程: MICROSOFT SQL SERVER 2005 的 XML 最佳实施策略
下一教程: 如何在SQL SERVER中恢复数据

您可以阅读与"修改用户定义的数据类型"相关的教程:
· 修改用户定义的数据类型
· 用户自定义的数据库修复
· 用户自定义的数据库修复
· 修改自定义数据类型精度
· SQL SERVER2000中用户自定义数据类型的使用
    微笑服务 优质保证 索取样品