【问题标题】:Create new database with schema from code使用代码中的模式创建新数据库
【发布时间】:2014-01-10 14:10:28
【问题描述】:

我们正在为我们现有的客户构建一个新的基于云的应用程序,该应用程序将为他们都在使用的 NaCl 程序添加/替换功能。每个客户都有自己的数据库(架构彼此 100% 相同),我们必须在我们的云提供商上创建一个新的数据库实例。

数据的同步过程已经确定,并且我已经设法相对轻松地创建数据库。唯一的问题是更新数据库模式以匹配“数据库模板”(如果你愿意的话)。根据我的方法,我似乎遇到了一个或另一个问题:

如果我尝试通过 ExecuteCommand() 将脚本 (LINQ-to-SQL) 发送到 sql 服务器,我会收到大量错误,从声明标量变量到语法错误,再到某些需要成为第一个语句的函数一个查询批处理。请注意,此脚本是从 SSMS 生成的脚本。

我想到的唯一其他方法是执行本地存储在机器上的脚本(我还没有真正尝试过),但我读到你不能运行具有可变数据库名称的本地脚本......是必需品。

任何帮助将不胜感激!

【问题讨论】:

    标签: c# sql-server asp.net-mvc database linq


    【解决方案1】:

    SSMS 生成的脚本包含go。在 SSMS 中,go 结束了一个批处理,但 ADO.NET 的 ExecuteCommand 并非如此。

    go 上拆分脚本,并使用ExecuteCommand() 分别发送每个部分。

    使用 SSMS 在本地(或远程)运行脚本也应该可以工作。

    我不确定您所说的“可变数据库名称”是什么意思。在 ADO.NET 中,您可以在连接字符串中设置数据库。在 SSMS 中,您可以使用use <dbname> 或查询工具栏中的下拉框。

    【讨论】:

    • 引用变量 db 名称:在以 _lcid 和 i 作为参数的函数中考虑以下内容:USE [Database_" + (_lcid + 1) + "_" + (i + 1) + @"]。我将看看在 GO 语句中拆分这个令人难以置信的巨大脚本。好像很麻烦。
    • 应该很容易使用string.Split创建go之间的部分数组
    • 在与撇号和引号约定不匹配进行了不懈的争​​斗之后,这最终确实奏效了。可以说数据库现在创建得很漂亮。感谢您的帮助,抱歉花了这么长时间才接受我忘记发布的答案。
    猜你喜欢
    • 2021-04-20
    • 2013-04-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多