您的位置:首页 > 数据库

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

2014-06-09 22:31 204 查看
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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: