|
導讀數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應... 數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。 --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)'
全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。
|