收藏本站 
广告服务 
网站地图 
>> 我们从网络和杂志上收集了近100000余篇各类电脑技术、网络技术、软件技术等方面的文章教程,我们的收录原则:不是精华拒不收录!
先飞电脑技术网技术文章数据库开发MS-SQL
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |
如何在数据库中进行更改表格
[ 作者:佚名    转贴自:网络转载    阅读次数:100    更新时间:2007-8-28 16:21:00   录入:刘光勇 ]         
    所有程序开发人员都会时不时地出现错误。有时候,错误的发生是因为我们没有建立明显但却没有指明的请求。

这里有一个例子:你的数据库运行良好,但数据接口出现很多错误,而且数据更新时出现新的请求:给每个表格添加两列(LastUpdated和UpdatedBy)。这里有数百个表格,因此手工操作不可能完成这个任务。

很显然,这是一个可重用代码块,因此你一定会希望只编写一次,就可以确保它能够在每一数据库中使用。(可能你需要给每个新的数据库稍做改进。例如,改变列表名。但主要的思想是,你希望让一个程序在一个数据库中的所有表格中运行,并且可以添加一个或更多列表。)

获得用户表格中的列表相当容易:

SELECT Name FROM sysobjects WHERE Type = 'U' ORDER BY Name

结果集可以作为一个用户自定义函数而更加容易处理,这一自定义函数返回一个表格:

CREATE FUNCTION dbo.UserTables_fnt
()
RETURNS TABLE
AS
RETURN
  (SELECT TOP 100 PERCENT name
  FROM dbo.sysobjects
  WHERE type = 'U')
  ORDER BY name
  )

假设你想给数据库中的每个表格添加

假设你想给数据库中的每个表格添加一个名为LastUpdated (TimeStamp类型)的列表。为了在任一给定的表格中添加一个列,例如Customers,你的命令可以如下所示:

ALTER TABLE MyDB.dbo.Customers ADD LastUpdated TimeStamp NULL

现在,你建立一个请求(查看, 存储过程, UDF),这一请求构成了你所需要完成任务的语句:

SELECT
'ALTER TABLE NorthwindTest.dbo.
[' + name + '] ADD LastUpdated TimeStamp NULL'
AS CommandText
FROM dbo.UserTables_fnt() 
假如你拷贝了名为Northwind的NorthwindTest范例数据库,
并运行这一代码,其结果如下所示:
ALTER TABLE NorthwindTest.dbo.
[Categories] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[CustomerCustomerDemo] ADD LastUpdated TimeStamp
NULL
ALTER TABLE NorthwindTest.dbo.
[CustomerDemographics] ADD LastUpdated TimeStamp
NULL
ALTER TABLE NorthwindTest.dbo.
[Customers] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[dtproperties] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
 ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
 ADD LastUpdated TimeStamp
NULL
ALTER TABLE NorthwindTest.dbo.
[Order Details] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[Orders] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[Products] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[Region] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[Shippers] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[Suppliers] ADD LastUpdated TimeStamp NULL
ALTER TABLE NorthwindTest.dbo.
[Territories] ADD LastUpdated TimeStamp NULL

我使用方括号以圈住表格名,因为它们能够保护有潜在错误的表格名:Order Details。对于没有空格的情况,剖析器不会考虑到方括号,然而对于有空格情况,生成的SQL代码将会产生错误。

你可以用各种方法来处理这种结果集,这些方法包括将其粘贴到Query Analyzer并运行,并且将它转化成储存程序,或者转化成一个可修改的视图。对于“一次性”特性,我喜欢使用第一个方法。

我喜欢用已经编写好的代码来编写程序,因为那样我就不需要重新编写——而且它不会有任何拼写错误。你可以扩展这一思想以执行任何DML操作。

如果你想试用这一技巧,我强烈推荐你先建立一个SELECT请求,这一请求可以构建所需要的DML。因此,在运行之前你可以检查,并校对它的语法。

文章首页【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“如何在数据库中进行更改表格”版权归文章所有者,转载请注明出处!
 ·上一篇文章:细化解析Oracle中限制返回结果集的大小      ·下一篇文章:SQL Server 压缩日志及数据库文件大小
相关文章
·教你如何正确调整DC的白平衡[71]
·教你如何排除网络故障[60]
·如何共享Oracle数据库身份空间[35]
·解析SQL Server中如何得到自动编号字段[31]
·如何将J2ME与XML集成[64]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号