程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 修改用戶定義的數據類型

修改用戶定義的數據類型

編輯:關於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 + '''')

exec SP_rechangfIEldtype @OLDTYPENAME, 'U_LOCALTYPE'

EXEC sp_rebuildallvIEw

EXEC('sp_droptype ' + @OLDTYPENAME)

EXEC('sp_addtype ' + @OLDTYPENAME + ', ''' + @newdtype + '''')

  1. 上一頁:
  2. 下一頁: