Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server powershell连接已由management studio分离的sql server数据库_Sql Server_Powershell - Fatal编程技术网

Sql server powershell连接已由management studio分离的sql server数据库

Sql server powershell连接已由management studio分离的sql server数据库,sql-server,powershell,Sql Server,Powershell,我正在编写一个powershell脚本,该脚本将自动化开发环境部署,但我遇到了一个连接db的问题。我正在添加两个管理单元SqlServerCmdletSnapin100和SqlServerProviderSnapin100,并使用SQLSERVER:\SQL\localhost\SQLEXPRESS和AttachDatabase方法。这很好,如果我以同样的方式使用DetachDatabase方法,我可以继续重新运行脚本。当我从ManagementStudio分离并尝试再次运行脚本时,问题就出现了

我正在编写一个powershell脚本,该脚本将自动化开发环境部署,但我遇到了一个连接db的问题。我正在添加两个管理单元
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()}