修改用户定义的数据类型

原创 2005年06月01日 20:30:00

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

了解Hadoop数据类型,输入输出格式及用户如何自定义。

一:Hadoop内置的数据类型。     Hadoop提供如下内置的数据类型,这些数据类型都实现了WritableComparable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存储...

DB2用户自定义数据类型UDT

DB2用户自定义类型(User-Defined distinct types,UDT),这里涉及自定义单值类型,基于DB2内置数据类型。 1、创建 语法如下: CREATE [distinct]...

15、C语言用户自定义数据类型

C语言用户自定义数据类型 一、结构体 定义语法: struct [名称] { 成员列表; }[变量列表]; 示例程序: #include #include struct Stu...

C#高级编程四十一天----用户定义的数据类型转换

用户定义的数据类型转换 C#允许定义自己的 数据类型,这意味着需要某些 工具支持在自己的数据类型间进行数据转换.方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明为隐式或者显式,...

c#之用户定义的数据类型转换

c# 允许用户进行两种定义的数据类型转换,显式和隐式,显式要求在代码中显式的标记转换,其方法是在圆括号中写入目标数据类型。   对于预定义的数据类型,当数据类型转换时可能失败或丢失某些数据,需要显式...

HashSet中存方用户自定义数据类型数据,重写equals方法和hashCode方法

import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(St...

SQL 用户定义表类型,在存储过程里使用数据类型作参数

在数据库编程里使用数据类型,可以提高代码的重用性,它们经常被使用在方法和存储过程中。使用数据类型,我们可以避免在存储过程里定义一串的参数,让人眼花缭乱,它就相当于面向对象语言里,向一个方法里传入一个对...
  • LeyYang
  • LeyYang
  • 2015年08月14日 15:28
  • 7680

环形队列——用户对用户自定义数据类型的相关操作

采用C++语言实现的数据结构,环形队列。其与之前版本的区别主要就在于用户可以采用自己自定义的数据类型进行相关操作。...

SQL SERVER的数据类型自定义

  • 2009年04月23日 10:14
  • 7KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:修改用户定义的数据类型
举报原因:
原因补充:

(最多只允许输入30个字)