我今天来到这里,看看是否有人可以给我一个建议来改进我更新数据库的方式。
问题是,每次我需要更改内容时,我都会有一个文件存储新脚本。例如,假设我需要在表中添加新列。我会在名为alter table CLIENTS
add AGE integer
的文件中添加以下行:
script1.sql
执行此操作后,我将把它发送给具有更新应用程序的客户端,并要求他在其数据库上运行script1.sql
。这对我来说很好。
当此文件开始变大时,问题就出现了,客户端需要接收新的更新。
客户端将再次运行AGE
文件,但现在有更多更新。他将收到错误,指示数据库中已存在名为script1.sql
的列。
最大的问题是当我更改应用程序的版本时。如果我将应用程序从 Application1 更新为 Application2 ,我还会将脚本从script2.sql
更改为script1.sql
。
现在,我的客户端需要运行它们以获得正确的版本而不会发生冲突。他也会遇到很多错误,因为{{1}}的几乎所有内容都已在他的数据库中处理过了。
我想要的是消除面对冲突的机会。这个过程一直在为我工作,但总是会造成一些麻烦。因此,如果有人知道如何让它更好地工作,请帮助我。
答案 0 :(得分:0)
通常,SQL提供了一个名为IF EXISTS
(也是IF NOT EXISTS
)的东西,所以你可以编写如下语句:
CREATE TABLE IF NOT EXISTS users ...
如果尚未创建用户表,则只会创建用户表。
通常会有一个变体可以添加到您的所有语句中(包括更新,如重命名列等)。
然后,如果已经添加了表(或列更新等),那么它将不会再次尝试运行该SQL命令 - 这意味着您可以根据需要反复运行相同的文件。
(注意:这称为幂等)
您需要google了解有关如何将EXISTS
用于sql-server