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

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 (‘‘‘[email protected]+‘‘‘)‘   */
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     }

时间: 2024-10-29 19:11:30

更新数据库中所有表【插入新列】的相关文章

利用SQL语句重置数据库中所有表的标识列(自增量)

可以应用于2种场景: 1.清空所有表中的数据,数据清空后,最好是能够让表中的标识列从1开始记数,所以要重置标识列的当前值. 2.用复制的方式,发布订阅同步数据之后,订阅端的数据不会自动增长,比如自增ID该9527了,但如果中间有跳过的ID,会自动填充缺失的路过的ID,该执行如下代码,即可从应该的9527开始增长. declare @tablename varchar(50) declare @sql varchar(1000) declare cur cursor for select name

用SQL语句创建和删除Access数据库中的表;添加列和删除列

用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Access数据库中的表;添加列和删除列SQL语句,具体使用方法请看帮助          Create    Table    tab1    (fld1    integer)      Drop    Table    tab1          Alter    Table    tab1   

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?

原文:http://www.iteye.com/problems/77856 定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据? 表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗? 这个真的是比较困难. 首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口

通过jdbc获取数据库中的表结构

通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等.MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户.关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法. DatabaseMetaData dbmd = con.getMetaData()

Java对比两个数据库中的表和字段,写个冷门的东西

Java对比两个数据库中的表和字段,写个冷门的东西 转载的 来源网络 目前所在的项目组距离下个版本上线已经很近了,就面临了一个问题:开发人员在开发库上根据需要增加数据表.数据字段.或者变更了字段类型或者字段长度等等. 由于时间比较紧迫,导致在开发过程中不可能一一把DDL数据库脚本记录下来,在比较大的项目中,比如我所在项目开发的系统大概包含了800张左右的表,字段上10000个的情况下,人工处理明显不可行,所以我们就得通过程序来判断比对,哪些是我们需要新增加的表,哪些是我们需要新增加的字段,哪些是

通过 jdbc 分析数据库中的表结构和主键外键

文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hibernate 是 ORM 框架,他是有能力根据实体生成数据库表的.我们在单元测试的时候用到了 dbUnit ,dbUnit 可以帮助我们在测试前把数据库的测试数据准备好,然后我们就利用现成的数据库环境测试,测试完成后需将数据库中的所有数据清除(为了不影响其他的单元测试),然后接着下一个测试.虽然已经

Code First添加一个现有数据库中的表

描述 刚刚使用EF,还没搞明白,遇到下面问题,记录一下. 都说EF好用,一直也没用过,以前写代码都是ADO.NET,写起来费时费力还没什么大进展,如果能把这些事简化一下把精力放到逻辑或者更有用的地方岂不是更好.所以想使用EF.Code First,从字面的意思来看是先有代码后有数据库,通过Model来创建数据库,好像只能是通过Model来生成数据库,至少我接触2天以来是这样,项目已经开始一段时间了,数据库已经有一定的数据,虽然是测试数据,但也不想删掉,从新添加数据也是很烦人的事.想找到一种能够不

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,

如何将数据库中的表导成XML文件

1.现将数据库中的信息读到DataTable中 2.用函数将DataTable转为string private string ConvertDataTableToXML(DataTable dt) { if (dt != null) { MemoryStream ms = null; XmlTextWriter XmlWt = null; try { ms = new MemoryStream(); XmlWt = new XmlTextWriter(ms, Encoding.Unicode);