对附加的数据库运行 sql 脚本?
Posted
技术标签:
【中文标题】对附加的数据库运行 sql 脚本?【英文标题】:Running sql scripts against an attached database? 【发布时间】:2010-01-16 22:01:53 【问题描述】:我在 Sql Server 2008 Express 实例上附加了一个 MDF,我需要针对它运行一些 sql 脚本来生成表、索引等。
但我不知道如何让它发挥作用。如果我在 Visual Studio 中加载脚本,它只允许我连接到服务器并针对数据库运行它。我不能选择不同的提供者(Microsoft Sql Server 数据库文件),所以我不能选择我的 MDF。
这让我只能选择将脚本作为单个查询运行,但这不起作用,因为它似乎不支持 TSQL CREATE 语句。
如何针对附加的数据库运行我的 sql 脚本?
【问题讨论】:
我使用的是SQL 2005,附加数据库后,我可以查询-运行脚本一切,你不能做什么?我错过了什么吗? 如果可能,尝试备份还原而不是附加数据库。? 【参考方案1】:我遇到了同样的问题,这对我有用。
右键单击脚本并选择连接 > 连接
应该已经为本地 SQLEXPRESS 实例设置了服务器名称和身份验证。
点击选项按钮
单击其他连接参数选项卡
使用以下指导粘贴数据库文件的路径:
AttachDBFilename=C:\Path\To\Database\LocalData.mdf;database=LocalData;
点击连接按钮
如果您仍然无法连接,可能是因为已经有一个打开的连接。检查服务器资源管理器,如果连接已打开,请右键单击并选择关闭连接。
只要 SQL 脚本保持连接,此过程还将创建持久连接。您需要关闭脚本或选择右键单击 > 连接 > 断开连接。
更多信息可以在这个问题中找到: EF4 Generate Database
【讨论】:
就像第 5 步的注释一样。您应该使用属性窗格中表示的数据库的完整连接字符串(或者您想要获取连接字符串)。但是您第 5 步中的缩写语法不适用于我一个人。 如果数据库在不同的机器上怎么办?同样,我认为共享 db server 的 mdf 文件不是正确的方法。【参考方案2】:我假设您的意思是您在 Visual Studio 中有一个本地 MDF 文件(如 App_Data 文件夹)?
您可以通过连接命名管道来使用 SQL Management Studio。
首先,使用他们讨厌的查询工具在附加数据库上的 Visual Studio 中打开一个新查询。在属性窗口的 ServerName 下,以“your-PC-name\mini-guid”的格式保存该迷你 guid。像这样使用 Management Studio 进行连接:
\\.\pipe\mini-guid-here\tsql\query
例如,
\\.\pipe\7789925E-DCAA-4A\tsql\query
您应该会看到数据库下列出的文件名。
【讨论】:
有没有办法在不需要 SSMS 的情况下执行脚本?即直接来自VS?【参考方案3】:使用SqlCmd 实用程序怎么样?
sqlcmd 实用程序可让您输入 Transact-SQL 语句,系统 程序和脚本文件在 命令提示符,在查询编辑器中 SQLCMD 模式,在 Windows 脚本文件中 或在操作系统中 (Cmd.exe) SQL Server 代理作业的作业步骤。 此实用程序使用 OLE DB 执行 Transact-SQL 批处理。
【讨论】:
那很好,但我认为它不适用于附加的数据库(至少我的尝试失败了)。还是我错了?【参考方案4】:嗯,我在尝试将 ASPNETDB 的内容导入不同的 MDF 时遇到了同样的问题,我就是这样做的:
在服务器资源管理器中右键单击 ASPNETDB.mdf 并发布到 .sql 文件。
使用 file - open 打开 .sql 文件。 (未连接)将出现在名称中。
右键单击附加的目标数据库并显示属性(TargetDatabase.MDF)
从属性窗口中获取连接字符串。 复制“Data Source=.\SQLEXPRESS;”之后的连接字符串中的所有内容
单击执行 Sql 按钮(Ctrl + Shift + E)
在服务器名称中输入 .\SQLEXPRESS
在“附加连接参数”选项卡中,粘贴您在第 4 步中复制的数据
单击连接并从文件列表中按磁盘位置选择相关的目标 MDF 文件。
点击连接。
刷新目标数据库
【讨论】:
以上是关于对附加的数据库运行 sql 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
我的SQL数据库是2008版本,如何附加SQL2005创建的数据库?(只有数据库文件,没有脚本)急求高手!!