更新数据库中所有表【插入新列】

1、通过SQL语句,循环数据库所有的表,分别插入新列“F_EditTime”

 

  1   use  DDDD
 
2   /* Get Table Cursor */
 
3   declare   @tablenname    varchar ( 50 );
 
4   declare   @isExist   int ;
 
5  
 
6   /* 游标遍历数据库所有的用户表表名 */
 
7   Declare  t_Table_cursor  Cursor   for
 
8    SELECT  name  FROM  sys.sysobjects  where  Type = ' u ' ;
 
9  
10   /* Open Cursor */
11   open  t_Table_cursor
12   /* Fetch  */
13   fetch   next   from  t_Table_cursor
14   into   @tablenname ;
15  
16   // 循环添加新列
17   while   @@Fetch_Status = 0
18    begin
19     if ( @tablenname   <>   '' )
20      begin
21        set   @isExist = 0 ;
22        select   @isExist = count ( * from  syscolumns  where  id = object_id ( @tablenname and  name = ' F_EditTime '
23        print   @isExist
24        if ( cast ( @isExist   as   int =   0 )
25         begin
26          print   ' in  ' + @tablenname
27          exec ( ' alter table  ' + @tablenname + '  add F_EditTime datetime default getdate()  ' );
28          exec ( ' update  ' + @tablenname + '  set  F_EditTime=getdate() ' );
29         end
30      end
31     Fetch   next   from  t_Table_cursor 
32        into   @tablenname ;
33    end
34   /* close and Release */
35   close  t_Table_cursor;
36   DEALLOCATE  t_Table_cursor;
37  
38  微软权威的存储过程
39     DECLARE     @TableName     varchar ( 255 )  
40     DECLARE     @ExeSQL     varchar ( 4000 )    
41     DECLARE    Table_Cursor    CURSOR     FOR     SELECT     [ name ]     FROM    sysobjects    WHERE    xtype = ' U '   
42     OPEN    Table_Cursor  
43     FETCH     NEXT     FROM      Table_Cursor    INTO     @TableName   
44     WHILE ( @@FETCH_STATUS = 0 )  
45     BEGIN   
46       PRINT     @TableName   
47       /* SELECT   @ExeSQL='DBCC   CHECKTABLE ('''+@TableName+''')'    */
48       exec ( ' alter table  ' + @TableName + '  add F_EditTime datetime default getdate()  ' );
49       EXEC ( @EXESQL )  
50     FETCH     NEXT     FROM      Table_Cursor    INTO     @TableName   
51     END   
52     CLOSE    Table_Cursor  
53     DEALLOCATE    Table_Cursor  
54     GO

2、当然这个也可以通过Application实现
   具体如下

1      protected void Button2_Click(object sender, EventArgs e)
 
2      {
 
3          ArrayList namesList = getAllNames();
 
4           for  ( int  i  =   0 ; i  <  namesList. Count ; i ++ )
 
5          {
 
6               if  (!isExit(namesList [ i ] .ToString()))
 
7              {
 
8                  updateTable(namesList [ i ] .ToString());     
 
9              }   
10          }
11      }
12       // 执行插入列操作
13       public  bool updateTable(string tableName)
14      {
15          bool success  =  false ;
16          SqlConnection con  =  DB.CreateServerCon();
17          string strSql  =  "  alter   table  " + tableName + "   add  F_EditTime  datetime   default   getdate ()";      
18          string updateSql = " update  "  +  tableName  +  "  set  F_EditTime  =   getdate ()";
19          SqlCommand cmd  =  new SqlCommand(strSql, con);
20          SqlCommand updateCmd  =  new SqlCommand(updateSql, con);
21          try
22          {
23              con. Open ();
24              Convert .ToInt32(cmd.ExecuteNonQuery()); 
25              Convert .ToInt32(updateCmd.ExecuteNonQuery());      
26             success  =  true;     
27          }
28          catch
29          { }
30          finally
31          {
32              con. Close ();
33          }
34           return  success;
35      }
36       ///   < summary >
37       ///  判断在表中字段名是否存在
38       ///   </ summary >
39       ///   < param name = "tableName" > 表名 </ param >
40       ///   < returns ></ returns >
41       public  bool isExit(string tableName)
42      {
43          bool success  =  false ;
44          SqlConnection con  =  DB.CreateServerCon();       
45          string strSql  =  " select   count ( * from  syscolumns  where  id = object_id ( ' "+tableName+" ' and  name = ' F_EditTime ' ";
46          SqlCommand cmd  =  new SqlCommand(strSql, con);
47          try
48          {
49              con. Open ();
50               int   count   =   Convert .ToInt32(cmd.ExecuteScalar());
51               if  ( count   >   0 )
52              {
53                  success  =  true;
54              }
55          }
56          catch
57          { }
58          finally
59          {
60              con. Close ();
61          }
62           return  success;
63      }
64       ///   < summary >
65       ///  得到数据库中所有的用户表
66       ///   </ summary >
67       ///   < returns ></ returns >
68       public  ArrayList getAllNames()
69      {
70          ArrayList namesList = new ArrayList();
71          SqlConnection con  =  DB.CreateServerCon();
72          string strSql  =  " SELECT  name  FROM  sys.sysobjects  WHERE  type = ' U '   order   by  name";       
73          SqlCommand cmd  =  new SqlCommand(strSql, con);
74          try
75          {
76              con. Open ();
77              SqlDataReader sdr  =  cmd.ExecuteReader();
78               while (sdr. Read ())
79              {
80                  namesList. Add (sdr [ 0 ] .ToString());
81              }
82          }
83          catch
84          { }
85          finally
86          {
87              con. Close ();
88          }
89           return  namesList;
90      }

转载于:https://www.cnblogs.com/spark_wu/archive/2009/07/28/1532911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值