• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 修改用戶定義的數據類型

    發表于:2007-05-25來源:作者:點擊數: 標簽:用戶--SQLSERVER修改定義類型
    --SQLSERVER的自定義類型比較好用吧,但是,一旦引用該數據類型后,想修改數據類型,就是一大頭疼的事了,本存儲過程就是專門對付它的。 --sp_rebuildallview 見本BLOG中的其它頁面 create procedure sp_rechangfieldtype(@typename varchar(50), @newtype v

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


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>