Sql server 使用powershell创建Sql DB搜索dacpac并使用位于中的文件夹命名DB
我正在尝试通过搜索文件夹中的*.dacpac文件在Sql Server中创建数据库。对于找到的每个.dacpac文件,我需要使用找到.dacpac的文件夹的名称创建一个数据库 范例 C:\Folder\containsSql server 使用powershell创建Sql DB搜索dacpac并使用位于中的文件夹命名DB,sql-server,database,powershell,dacpac,Sql Server,Database,Powershell,Dacpac,我正在尝试通过搜索文件夹中的*.dacpac文件在Sql Server中创建数据库。对于找到的每个.dacpac文件,我需要使用找到.dacpac的文件夹的名称创建一个数据库 范例 C:\Folder\contains C:\Folder\Project1\mydatabase.dacpac C:\Folder\Project2\mydatabase.dacpac C:\Folder\Project3\mydatabase.dacpac 创建数据库的脚本 cd "C:\Program Fil
- C:\Folder\Project1\mydatabase.dacpac
- C:\Folder\Project2\mydatabase.dacpac
- C:\Folder\Project3\mydatabase.dacpac
cd "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin"
$createDB = .\sqlpackage.exe /Action:Publish /SourceFile:"c:\Folder\Project1\mydatabase.dacpac" /TargetDatabaseName:"Project1" /TargetServerName:"(LocalDB)\MSSQLLocalDB"
我可以通过以下方法获得用作TargetDatabaseName的文件夹名称
PS C:\> $FolderName = Get-ChildItem C:\Folder | select -ExpandProperty Name
$FolderName
Project1
Project2
Project3
我尝试使用foreach循环查找dacpac文件并将其用作源文件,然后查找FolderName以用作TargetDatabaseName
$FolderName = Get-ChildItem C:\Folder | select -ExpandProperty Name
$dacpacfile = Get-ChildItem C:\Folder -Recurse -Include *.dacpac
foreach ($dacpac in $dacpacfile){
$createDB = .\sqlpackage.exe /Action:Publish /SourceFile:$dacpacfile /TargetDatabaseName:$FolderName /TargetServerName:"(LocalDB)\MSSQLLocalDB"}
收到的错误是:
\sqlpackage.exe:*无法从加载包
'C:\Folder\Project1\mydatabase.dacpac
C:\Folder\Project2\mydatabase.dacpac
C:\Folder\Project3\mydatabase.dacpac'。第4行字符:21
+ ... $createDB=。\sqlpackage.exe/Action:Publish/SourceFile:$dacpacfile。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:NotSpecified:(*无法l…tabase.dacpac'.:String)[],RemoteException
+FullyQualifiedErrorId:NativeCommandError
我希望我需要创建两个阵列,并尝试一步一步地将它们组合在一起,但如果无法正确完成此操作,将非常感谢您的帮助。在这里,请尝试以下操作:
$dacpacFiles = Get-ChildItem C:\project -Recurse -Include *.dacpac
cd "C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin"
foreach ($dacpacFile in $dacpacFiles)
{
$dir = Split-Path $dacpacFile.Directory -Leaf
$filePath = $dacpacFile.FullName
$createDB = .\sqlpackage.exe /Action:Publish /SourceFile:$filePath /TargetDatabaseName:$dir /TargetServerName:"."
}
在这里,试试这个:
$dacpacFiles = Get-ChildItem C:\project -Recurse -Include *.dacpac
cd "C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin"
foreach ($dacpacFile in $dacpacFiles)
{
$dir = Split-Path $dacpacFile.Directory -Leaf
$filePath = $dacpacFile.FullName
$createDB = .\sqlpackage.exe /Action:Publish /SourceFile:$filePath /TargetDatabaseName:$dir /TargetServerName:"."
}