Sql server 使用powershell创建Sql DB搜索dacpac并使用位于中的文件夹命名DB

Sql 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

我正在尝试通过搜索文件夹中的*.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 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:"."
}