批量修改相同結構的table layout

  最近公司的財務系統要和總部的財務系統版本同步,由於公司的財務系統有十幾年沒有和總部的財務系統進行版本同步了,趁這次OS升級的機會進行同步,公司將table layout的同步交給我處理,由於公司的財務系統備份了很多表,而這些表的結構都一樣,命名也有一定的規則,比如表ss01,後面的備份的表就是ss0101,ss0102...。

  經過和總部的table layou相比之後發現,所有的table layout字段結構都沒有改變,這讓我很吃驚,也很佩服,說明當初設計table layou的人設計table的多么的完美,十幾年之後僅僅變化了一些字段的精度,比如:decimal(14,3),改為decimal(18,3),或者是默認值有些改變,所以我只需要修改精度和默認值就OK了。

  但是每個表都有幾十個相同結構的表啊,怎么辦?難道要我一個一個的修改表結構,這樣要做到猴年馬月啊!(PS:公司的財務系統總共有1000多個表),後來想了個偷懶的辦法:用遊標生成命令:直接print出來,然後執行print的語句,呵呵!如何儘快的比對公司和總部的兩table的layout呢?我將表的design試圖中的結構複製出來,貼到EXCEL中,字段名稱、類型、長度,一目了然,只需再加一個默認值,默認值就要自己到design視圖中去找一下了,至於是要修改精度呢,還是要修改默認值,按需索取,呵呵!

  語句如下:

 

ExpandedBlockStart.gif 代码
 1 
 2 
 3  select    name    from    sysobjects    where    type = ' U '   AND  NAME  LIKE   ' ss82% '   order   by  name 
 4 
 5  -- ---
 6  DECLARE   @dbName   NVARCHAR ( 128 )
 7  DECLARE   @qSql   NVARCHAR ( 4000 )
 8  DECLARE  dbList  CURSOR  Local  FOR              -- 建立遊標
 9  select    name    from    sysobjects    where    type = ' U '   AND  NAME  LIKE   ' ss82% '   order   by  name 
10  for   Read   Only                                  -- 禁止通過遊標更新
11  OPEN  dbList
12  FETCH   Next   FROM  dbList  INTO   @dbName
13  While  ( @@FETCH_STATUS   <>   - 1 )
14    BEGIN
15       set   @qSql = ''
16       -- 修改默認值
17       set   @qSql = ' alter table  ' + @dbName + '  drop constraint df_ ' + @dbName + ' _amtd   '
18       SET   @qSql = @qSql + ' alter table  ' + @dbName + '  add constraint df_ ' + @dbName + ' _amtd ' + '  default (0) for amtd '
19       -- 修改表結構
20       -- set @qSql=@qSql+' aLTER table '+@dbName+' aLTER cOLUMN amt2 decimal(18,3) '
21       -- set @qSql=@qSql+' aLTER table '+@dbName+' aLTER cOLUMN qty decimal(18,3) '
22       -- set @qSql=@qSql+' aLTER table '+@dbName+' aLTER cOLUMN amt1 decimal(18,3) '
23       -- set @qSql=@qSql+' aLTER table '+@dbName+' aLTER cOLUMN amt0 decimal(18, 3) '
24       -- set @qSql=@qSql+' aLTER table '+@dbName+' aLTER cOLUMN upri decimal(13, 6) '
25       PRINT   @qSql
26      
27       FETCH   NEXT   FROM  dbList  INTO   @dbName
28  END
29  close  dbList
30  deallocate  dbList
31 
32  -- 删除默认值
33    select     *     from    sysobjects    where     object_name (parent_obj) = ' SS83KM '    
34     -- 执行结果也可以得到表的默认值信息   
35    -- ------------------------------------------------------------------   
36    --  确定默认值名称后,就可用   
37     alter     table     [ 表名 ]     drop     constraint     [ 默认值名 ]
38 
39  /* ************************************************************************************* */
40    -- alter table LOGSS83SF drop constraint DF_LOGSS83SF_LOGDT  
41  -- -
42 
43    select     *     from    sysobjects    where     object_name (parent_obj) = ' SS821F '    
44     alter     table    LOGSS83SF    drop     constraint    DF_LOGSS83SF_LOGDT
45    
46    
47    
  

 

 

转载于:https://www.cnblogs.com/jxcia_Lai/archive/2010/10/26/1861224.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值