我目前正在开发一个包含SQLServer使用的项目。我想知道在安装软件来构建数据库时我应该使用什么策略?我需要设置表,存储过程和用户。
我的软件是否需要检查启动以查看数据库是否存在,然后是否存在,请创建它? 有什么办法可以在安装SQLServer时自动执行此操作吗?
谢谢。
修改 好的,现在我有很多很好的解决方案,但我真的在寻找一个解决方案(免费或开源会很棒),这将允许我部署一个新的应用程序,需要SQLServer重新安装和设置满足需要软件。
答案 0 :(得分:3)
RedGate软件提供SQL Packager,它允许您选择生成脚本/ .exe来部署整个数据库,包括来自单个.exe的所有内容(存储过程,表等)。如果你能负担得起并想要有简单的方法去做(不必亲自去做),那就是要走的路; - )
- 在您的客户群中轻松推出数据库更新
- 准确,快速地编写和压缩您的架构和数据
- 将任何预先存在的SQL脚本打包为.exe,或作为C#项目启动
- 简化SQL Server 2000,2005和2008的部署和更新
答案 1 :(得分:1)
您可以使用SQL脚本完成所有这些操作。然后,您的安装程序将针对客户的SQL Server运行它们。
答案 2 :(得分:1)
您可以编写一个仅在不存在时创建对象的T-SQL脚本。对于数据库:
if db_id('dbname') is null
create database dbname
对于存储过程(有关对象类型列表,请参阅MSDN):
if object_id('spname', 'P') is null
exec ('create procedure dbo.spname as select 1')
go
alter procedure dbo.spname
as
<procedure definition>
这些脚本的好处是多次运行它们不会产生问题 - 所有对象都已存在,因此脚本不会再次执行任何操作。
答案 3 :(得分:1)
您可以使用Migrator.Net之类的迁移框架,然后每次启动应用程序时都可以运行迁移。这种方法的好处是,当您发布新版本的软件时,您可以更新数据库。
去看看他们的Getting started页面。这可能会清除这个概念。
我已经成功地使用这种方法来解决您遇到的问题。
答案 4 :(得分:0)
如果您正在使用MS SQL Server,那么设置服务器非常简单。至于创建数据库和表,通常只执行一次。数据库的重点是数据是持久的,所以如果数据库不存在,你可能会遇到a)主要的稳定性问题,或者b)不需要实际的数据库。
设计数据库,表和过程是软件开发过程的一个完整组件。当我这样做时,我通常会将所有创建脚本保存在源代码管理中。在创建之后,您将以假设数据库已经存在的方式编写程序 - 检查连接是一回事,但程序绝不应该认为根本没有数据库。
答案 5 :(得分:0)
您可以从数据库中存在的所有对象创建脚本。之后,您可以从代码中运行此脚本。
在sql server中使用脚本向导创建db脚本时,在“选择脚本选项”部分中,将“包含但不存在”设置为yes。只有当db不存在时才完成这项工作。