在 App_Data 中的 MDF 文件上运行 SQL 脚本

Posted

技术标签:

【中文标题】在 App_Data 中的 MDF 文件上运行 SQL 脚本【英文标题】:Run SQL script on MDF file in App_Data 【发布时间】:2012-07-14 20:29:51 【问题描述】:

我有以下设置:

开发:我自己的计算机使用带有连接字符串的 MDF 文件,该连接字符串引用我的 app_data 文件夹。 生产:具有自己的 SQL 数据库的在线服务器

当我想在我的系统中创建一个新表/字段时,我会在部署中创建它,然后在没有数据的情况下在生产环境中运行这些脚本。

现在,我处于相反的情况:我从生产服务器生成了脚本,并希望将这些脚本运行到我的本地 MDF 文件中。

我该怎么做?到目前为止我看到的所有答案都对我没有帮助。

我尝试了以下方法

我尝试在 Visual Studio 的“运行查询”中运行整个 SQL 脚本,但得到“不支持设置 SQL 构造或语句”。错误。

我想我必须在 Microsoft SQL Management Studio 中以某种方式打开 MDF 文件 - 但我真的找不到让这一切正常工作的方法。

编辑

半年后,我一直在一次又一次地使用建议的方法作为答案。这是迄今为止最好的解决方案。项目中不再有 MDF 文件!

我强烈建议任何阅读本文的人开始在本地数据库中使用您的数据库。

【问题讨论】:

那种“从磁盘附加.mdf文件”的方法真的不是一个好主意。为什么你不只是在你的开发机器上使用你的 SQL Server 实例——就像在生产中一样? 在服务器实例上创建数据库,使用逻辑数据库名称而不是在文件系统中摆弄.mdf 文件 - 这使得就那么容易针对它运行脚本,备份它等等。 我想这可能是最好的解决方案。我一定会调查的。其他方式可行吗? 不知道 - 我很快就放弃了“附加 .mdf”方法,以至于我不得不对该文件执行 .sql 脚本...... 我最终改为实施您的解决方案。谢谢!请发布答案,以便任何搜索此内容的人都可以轻松获得该建议:) 【参考方案1】:

在我看来,整个 AttachDbFileName= 方法是有缺陷的。由于该.mdf 文件未附加到您已安装的 SQL Server 实例,因此您不能做很多事情:

您不能使用BACKUP 来备份您的数据库 你不能轻易地对你的数据库执行.sql脚本 还有很多东西

在我看来,唯一真正可行的解决方案是

    安装 SQL Server Express(反正你已经完成了) 安装 SQL Server Management Studio Express 在SSMS Express中创建您的数据库,给它一个逻辑名称(例如YourDatabase

    使用它的逻辑数据库名称(在服务器上创建它时给出)连接到它——不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=YourDatabase;Integrated Security=True
    

    其他一切都一模一样和以前一样......

【讨论】:

您必须从连接字符串中取出 User Instance = true 参数。【参考方案2】:

在 Visual Studio 中连接到 MDF:

https://***.com/a/173221/188926

然后您可以在 SQL Server 对象资源管理器中打开并运行查询。

【讨论】:

以上是关于在 App_Data 中的 MDF 文件上运行 SQL 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Visual Studio 使用我的数据库,而不是 ASP.NET MVC 项目中 App_Data 文件夹中的 .mdf 文件?

如何查看 mdf 文件中的数据

带有本地 db .mdf 文件的 Web 应用程序如何发布到 Azure

无法创建文件 database.mdf,因为它已经存在

无法从网络上的 PC 访问我的 WPF 应用程序中的数据库(.mdf 文件)

有没有办法让 App_Data 中的文件在发布时不会覆盖较新的文件?