博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
修改用户定义的数据类型
阅读量:6864 次
发布时间:2019-06-26

本文共 2516 字,大约阅读时间需要 8 分钟。

create procedure sp_rechangfieldtype(@typename varchar(50), @newtype varchar(50))asbegindeclare @typeid intdeclare @tablename varchar(50)declare @column varchar(50)declare @sqlstr varchar(200)declare @defaultid intselect @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 forselect o.name, c.name, c.cdefaultfrom syscolumns c, systypes t, sysusers u, sysobjects owhere c.xusertype = @typeid and t.xusertype = @typeid and o.uid = u.uid and c.id = o.id  and o.type = 'u'open mycursorfetch next from mycursor into @tablename, @column, @defaultidwhile @@fetch_status = 0begin  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, @defaultidend--如果没有约束,则可以直接删除。如果有约束。先处理约束。close mycursordeallocate mycursorendGOcreate procedure SP_CHANGEFIELD(@OLDTYPENAME VARCHAR(50), @NEWDTYPE VARCHAR(50))asbegin  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'endGO--以下是示例。将U_HELLO的长度改为 30SP_ADDTYPE U_HELLO, 'VARCHAR(10)'GOCREATE TABLE TESTTYPE(NAME U_HELLO)GOSP_CHANGEFIELD 'U_HELLO', 'VARCHAR(30)'

 

create procedure sp_rebuildallviewasbegindeclare @mytext varchar(8000)declare @id intdeclare mycursor cursor forselect c.text from dbo.syscomments c, dbo.sysobjects o     where o.id = c.id and o.type = 'v'order by c.number, c.colidopen mycursorfetch next from mycursor into @mytextwhile @@fetch_status =0begin  set @id = patindex('%create%', @mytext)    set @mytext = stuff(@mytext, @id, 6, 'Alter')  print @mytext  exec(@mytext)  fetch next from mycursor into @mytextendclose mycursordeallocate mycursorend

转载于:https://www.cnblogs.com/limlee/articles/2563195.html

你可能感兴趣的文章
MVC 理解小谈
查看>>
php跨域cookie共享使用方法
查看>>
[C#]解决生成的缩略图模糊的问题
查看>>
mysql中修改字段的类型
查看>>
路由个数据包转发简介
查看>>
OBS插件学习入门:一个非常简单的、调节音量的filter
查看>>
[Lua]50行代码的解释器,用来演示lambda calculus
查看>>
socketserver模块解析
查看>>
使用winrar自解压功能制作安装包
查看>>
web crawling(plus4) pretend to be A web
查看>>
python (ploit3)hexun
查看>>
ASP.NET 学习笔记_01 广告控件的使用
查看>>
在vue-cli项目中使用echarts
查看>>
原生JS实现$.ajax
查看>>
Cocoa 框架 For iOS(二)对象的分配初始化、内省、单例
查看>>
参数和指针
查看>>
点滴积累【C#】---初始页面自动给站点名称赋值
查看>>
Java中程序初始化的顺序
查看>>
C++程序设计(第二版)谭浩强----程序题课后习题答案第二章
查看>>
GMap.net 离线地图问题
查看>>