Sql server powershell连接已由management studio分离的sql server数据库
我正在编写一个powershell脚本,该脚本将自动化开发环境部署,但我遇到了一个连接db的问题。我正在添加两个管理单元Sql server powershell连接已由management studio分离的sql server数据库,sql-server,powershell,Sql Server,Powershell,我正在编写一个powershell脚本,该脚本将自动化开发环境部署,但我遇到了一个连接db的问题。我正在添加两个管理单元SqlServerCmdletSnapin100和SqlServerProviderSnapin100,并使用SQLSERVER:\SQL\localhost\SQLEXPRESS和AttachDatabase方法。这很好,如果我以同样的方式使用DetachDatabase方法,我可以继续重新运行脚本。当我从ManagementStudio分离并尝试再次运行脚本时,问题就出现了
SqlServerCmdletSnapin100
和SqlServerProviderSnapin100
,并使用SQLSERVER:\SQL\localhost\SQLEXPRESS
和AttachDatabase
方法。这很好,如果我以同样的方式使用DetachDatabase
方法,我可以继续重新运行脚本。当我从ManagementStudio分离并尝试再次运行脚本时,问题就出现了。无论我在这里做什么(权限等),脚本从现在起将不断失败,并出现错误:
Exception calling "AttachDatabase" with "2" argument(s):
"Attach database failed for Server 'localhost\SQLEXPRESS'. "
如果我更改所附加数据库的名称,脚本将再次工作。系统数据库中是否有挂起数据库或数据库文件的东西需要删除?SMO使用嵌套的错误对象,因此我想知道基本错误消息的状态。如果运行此语句:
$error[0]| fl-force
您收到了什么错误消息
更新
运行了一个快速测试:
使用SSMS从我的本地实例分离数据库“hsg”,并成功附加此脚本:
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $s = get-item .
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $s.AttachDatabase("hsg",$sc)
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $sc = new-object System.Collections.Specialized.StringCollection
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $sc.Add("C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL1\MSSQL\DATA\hsg.mdf")
PS SQLSERVER:\SQL\WIN7BOOT\SQL1> $sc.Add("C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL1\MSSQL\DATA\hsg_log.ldf)
我使用SQLServerManagementStudio分离了一个数据库,并使用以下代码将该数据库连接回同一实例。它工作正常,除了附加的数据库没有获得原始名称,尽管文件是相同的
PS SQLSERVER:\sql\Hodentek8\RegencyPark\databases>
$files = new-object system.collections.specialized.stringcollection
$files.add("C:\Program Files\Microsoft SQLServer\MSSQL11.REGENCYPARK\MSSQL\DATA\Feb6.mdf")
$files.add("C:\Program Files\Microsoft SQL Server\MSSQL11.REGENCYPARK\MSSQL\DATA\Feb6_log.ldf")
$server=new-object Microsoft.SqlServer.Management.Smo.Server('Hodentek8\RegencyPark')
$db=new-object Microsoft.SqlServer.Management.Smo.Server
$dbname="feb6"
$server.AttachDatabase($db,$files)
有关详情如下:
也许您应该使用以下内容而不是localhost\SQLExpress: 我找到了我的一些代码的修复程序,这些代码返回了相同的错误:
$srv = new-object Microsoft.SqlServer.Management.Smo.Server 'Hodentek8\RegencyPark'
将默认实例的“Hodentek8\RegencPark”替换为(“(本地)”)
示例如下:
谢谢Chad,错误是:无法附加与现有数据库同名的数据库。现在,我已通过management studio按了5次刷新:)该数据库至少不在数据库列表中。在收到上述错误后运行DetachDatabase进行更新会导致另一个错误:Detach failed。。。数据库不存在。我无法重新处理您的问题。另一个建议是尝试刷新powershell PS SQLSERVER中的数据库:\SQL\WIN7BOOT\SQL1>get item.|%{$\.databases.refresh()}