修改用户定义的数据类型
2008-04-28 02:46
387 查看
--SQLSERVER的自定义类型比较好用吧,但是,一旦引用该数据类型后,想修改数据类型,就是一大头疼的事了,本存储过程就是专门对付它的。
--sp_rebuildallview见本BLOG中的其它页面
createproceduresp_rechangfieldtype(@typenamevarchar(50),@newtypevarchar(50))
as
begindeclare@typeidint
declare@tablenamevarchar(50)
declare@columnvarchar(50)
declare@sqlstrvarchar(200)
declare@defaultidint
select@typeid=xusertype
fromsystypes
wherename=@typenameandxusertype>256
AND(is_member('db_owner')=1ORis_member('db_ddladmin')=1ORis_member(user_name(uid))=1)
declaremycursorcursorfor
selecto.name,c.name,c.cdefault
fromsyscolumnsc,systypest,sysusersu,sysobjectso
wherec.xusertype=@typeid
andt.xusertype=@typeid
ando.uid=u.uid
andc.id=o.id
ando.type='u'
openmycursor
fetchnextfrommycursorinto@tablename,@column,@defaultid
while@@fetch_status=0
begin
if@defaultid<>0
begin
set@sqlstr='altertable'+@tablename+'drop'+object_name(@defaultid)
exec(@sqlstr)
set@sqlstr='altertable'+@tablename+'altercolumn'+@column+''+@newtype
exec(@sqlstr)
-- set@sqlstr='altertable'+@tablename+'addcontraint'+@tablename++'default0'
end
else
begin
set@sqlstr='altertable'+@tablename+'altercolumn'+@column+''+@newtype
print@sqlstr
exec(@sqlstr)
end
--if@@error<>0
-- continue
fetchnextfrommycursorinto@tablename,@column,@defaultid
end
--如果没有约束,则可以直接删除。如果有约束。先处理约束。
closemycursor
deallocatemycursor
end
GO
createprocedureSP_CHANGEFIELD(@OLDTYPENAMEVARCHAR(50),@NEWDTYPEVARCHAR(50))
as
begin
exec('sp_addtypeU_LOCALTYPE,'''+@newdtype+'''')
execSP_rechangfieldtype@OLDTYPENAME,'U_LOCALTYPE'
EXECsp_rebuildallview
EXEC('sp_droptype'+@OLDTYPENAME)
EXEC('sp_addtype'+@OLDTYPENAME+','''+@newdtype+'''')
execSP_rechangfieldtype'U_LOCALTYPE',@OLDTYPENAME
EXECsp_rebuildallview
EXECsp_droptype'U_LOCALTYPE'
end
GO
--以下是示例。将U_HELLO的长度改为30
SP_ADDTYPEU_HELLO,'VARCHAR(10)'
GO
CREATETABLETESTTYPE(NAMEU_HELLO)
GO
SP_CHANGEFIELD'U_HELLO','VARCHAR(30)'
--sp_rebuildallview见本BLOG中的其它页面
createproceduresp_rechangfieldtype(@typenamevarchar(50),@newtypevarchar(50))
as
begindeclare@typeidint
declare@tablenamevarchar(50)
declare@columnvarchar(50)
declare@sqlstrvarchar(200)
declare@defaultidint
select@typeid=xusertype
fromsystypes
wherename=@typenameandxusertype>256
AND(is_member('db_owner')=1ORis_member('db_ddladmin')=1ORis_member(user_name(uid))=1)
declaremycursorcursorfor
selecto.name,c.name,c.cdefault
fromsyscolumnsc,systypest,sysusersu,sysobjectso
wherec.xusertype=@typeid
andt.xusertype=@typeid
ando.uid=u.uid
andc.id=o.id
ando.type='u'
openmycursor
fetchnextfrommycursorinto@tablename,@column,@defaultid
while@@fetch_status=0
begin
if@defaultid<>0
begin
set@sqlstr='altertable'+@tablename+'drop'+object_name(@defaultid)
exec(@sqlstr)
set@sqlstr='altertable'+@tablename+'altercolumn'+@column+''+@newtype
exec(@sqlstr)
-- set@sqlstr='altertable'+@tablename+'addcontraint'+@tablename++'default0'
end
else
begin
set@sqlstr='altertable'+@tablename+'altercolumn'+@column+''+@newtype
print@sqlstr
exec(@sqlstr)
end
--if@@error<>0
-- continue
fetchnextfrommycursorinto@tablename,@column,@defaultid
end
--如果没有约束,则可以直接删除。如果有约束。先处理约束。
closemycursor
deallocatemycursor
end
GO
createprocedureSP_CHANGEFIELD(@OLDTYPENAMEVARCHAR(50),@NEWDTYPEVARCHAR(50))
as
begin
exec('sp_addtypeU_LOCALTYPE,'''+@newdtype+'''')
execSP_rechangfieldtype@OLDTYPENAME,'U_LOCALTYPE'
EXECsp_rebuildallview
EXEC('sp_droptype'+@OLDTYPENAME)
EXEC('sp_addtype'+@OLDTYPENAME+','''+@newdtype+'''')
execSP_rechangfieldtype'U_LOCALTYPE',@OLDTYPENAME
EXECsp_rebuildallview
EXECsp_droptype'U_LOCALTYPE'
end
GO
--以下是示例。将U_HELLO的长度改为30
SP_ADDTYPEU_HELLO,'VARCHAR(10)'
GO
CREATETABLETESTTYPE(NAMEU_HELLO)
GO
SP_CHANGEFIELD'U_HELLO','VARCHAR(30)'
相关文章推荐
- 修改用户定义的数据类型
- 修改已经被表引用的用户定义数据类型示例.sql
- 修改用户定义数据类型对已经编译的存储过程的影响的示例.sql
- 修改用户定义的数据类型
- C#高级编程四十一天----用户定义的数据类型转换
- SQL 用户定义表类型,在存储过程里使用数据类型作参数
- c#之用户定义的数据类型转换
- 创建与删除用户定义数据类型示例.sql
- c#之用户定义的数据类型转换介绍
- 第七章、更高级的索引结构(XML索引、用户定义数据类型、层次数据、空间数据、文件流、表压缩)
- sp_rename 更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
- c#之用户定义的数据类型转换
- 创建用户定义的数据类型
- 第一部分 数据内存存储、常预定义值类型、用户自定义值类型、预定义引用类型
- SQL 用户定义表类型,在存储过程里使用数据类型作參数
- 如何把"用户定义的数据类型"的ower改为dbo
- SQL SERVER 使用存储过程创建、删除用户定义数据类型
- C#高级编程四十一天----用户定义的数据类型转换
- 为用户定义的数据类型绑定默认值示例.sql
- (1)创建用户定义的数据类型