Sql 控制数据库中的更新

Sql 控制数据库中的更新,sql,sql-server,database,subquery,Sql,Sql Server,Database,Subquery,我今天来这里是想看看是否有人能给我一个建议来改进我更新数据库的方式 问题是,我有一个文件,每当我需要更改某些内容时,我都会存储新的脚本。例如,假设我需要在表中添加一个新列。我将在名为script1.sql的文件中添加以下行: alter table CLIENTS add AGE integer 完成后,我将把它发送给一个有更新应用程序的客户机,并让他在他的数据库上运行script1.sql。这对我来说很好 当这个文件开始变大,客户端需要接收新的更新时,问题就会出现 客户端将再次运行scri

我今天来这里是想看看是否有人能给我一个建议来改进我更新数据库的方式

问题是,我有一个文件,每当我需要更改某些内容时,我都会存储新的脚本。例如,假设我需要在表中添加一个新列。我将在名为
script1.sql的文件中添加以下行:

alter table CLIENTS 
add AGE integer
完成后,我将把它发送给一个有更新应用程序的客户机,并让他在他的数据库上运行
script1.sql
。这对我来说很好

当这个文件开始变大,客户端需要接收新的更新时,问题就会出现

客户端将再次运行
script1.sql
文件,但现在有更多更新。他将收到错误,表明数据库中已存在名为
AGE
的列

最大的问题是当我更改应用程序的版本时。如果我将应用程序从Application1更新为Application2,我还会将脚本从
script1.sql
更改为
script2.sql

现在,我的客户机需要同时运行这两个程序,以获得正确的版本,而不会产生冲突。他还会遇到很多错误,因为几乎所有的
script1.sql
都已经在他的数据库中处理过了


我想要的是消除面对冲突的机会。这个过程对我来说一直很有效,但总是会引起一些麻烦。因此,如果有人知道如何使它更好地工作,请帮助我。

通常SQL提供了一种称为
的东西,如果存在
(如果不存在也称为
),因此您可以编写一个语句,例如:

CREATE TABLE IF NOT EXISTS users ...
这将仅在尚未创建users表时创建该表

通常有一种变体可以添加到所有语句中(包括更新,如重命名列等)

然后,如果已经添加了表(或更新了列等),那么它将不会再次尝试运行该SQL命令——这意味着您可以反复运行同一个文件

(注:这称为幂等性)

您需要在谷歌上搜索有关如何使用sql server的
EXISTS
的详细信息

您需要将大脚本分解为许多可以执行的小脚本及其执行协议,以便第二次和第三次只运行新脚本