修改用户定义的数据类型

2016-01-29 16:47 5 1 收藏

修改用户定义的数据类型,修改用户定义的数据类型

【 tulaoshi.com - SQLServer 】

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)

  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'

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)

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

来源:http://www.tulaoshi.com/n/20160129/1499539.html

延伸阅读
(1)二进制数据类型 二进制数据包括 Binary、Varbinary 和 Image Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。 Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。 Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000...
标签: 电脑入门
对于新手用户来说,如何将自己的MAC系统用户名和用户密码设置成自己的,是一个很大的问题。但是老用户们都知道,其实修改MAC系统用户名和用户密码都是不难的,只要通过几个步骤,就可以快速的修改了。现在图老师小编就教大家如何修改MAC系统的用户密码。 Mac 修改User用户密码方法: 第一步:打开网络偏好设置。 第二步:打开用户与群...
饿了么怎么修改用户名   饿了么怎么修改用户名?如果你不满意自己饿了么账户信息上的用户名,那是可以更改的。不过每位用户仅限修改一次,和微信更改微信号类似。下面图老师小编将大家如何更该饿了么用户名,一起来看看吧! 1、打开饿了么APP,在我的中点击账户信息进入,即可看到用户名的选项,如图: 2、饿了么用户名只...
标签: Web开发
JavaScript脚本语言同其它语言一样,有它自身的基本数据类型、表达式和算术运算符以及程序的基本框架结构。JavaScript提供了四种基本的数据类型用来处理数字和文字, 而变量提供存放信息的地方, 表达式则可以完成较复杂的信息处理 。 1、 基本数据类型 在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用号或&...
标签: Web开发
  我们已经看过我们用层层嵌套式和非层次式两种方法定义元素和元素属性的方法。W3C XML Schema还有第三种设计方法--自定义数据类型,自定义数据类型可以定义我们自己需要的数据类型,它既可以是象PCDATA一样的简单类型,也可以是含有多个元素的复杂类型。 在simpleType和complexType元素中给出自定义数据类型的名字,然后定义子元素或者...

经验教程

642

收藏

74
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部