sqlpackage表列表

M R*_*ell 3 sql-server powershell

我正在尝试使用动态表列表从 powershell 运行 sqlpackage,但将表列表放入 var 时出现错误。我需要将表列表放入 var 中,因为它将动态生成。

下面的代码工作得很好:

.\sqlpackage.exe `
    /a:Export `
    /scs:"Data Source=$($ServerName);Initial Catalog=$($SourceDbName);User ID=my_user;Password=my_password" `
    /tf:$BacPacFileName `
    /p:TableData=[dbo].[QRTZ_CALENDARS] /p:TableData=[dbo].[QRTZ_SCHEDULER_STATE]
Run Code Online (Sandbox Code Playgroud)

但是,当我将表列表放入 var 中时,它失败了:

$tableList = "/p:TableData=[dbo].[QRTZ_CALENDARS] /p:TableData=[dbo].[QRTZ_SCHEDULER_STATE]"

.\sqlpackage.exe `
    /a:Export `
    /scs:"Data Source=$($ServerName);Initial Catalog=$($SourceDbName);User ID=my_user;Password=my_password" `
    /tf:$BacPacFileName `
    $($tableList)
Run Code Online (Sandbox Code Playgroud)

错误文本:

.\sqlpackage.exe:参数“TableData”具有无效值:
'[dbo].[QRTZ_CALENDARS] /p:TableData=[dbo].[QRTZ_SCHEDULER_STATE]'。
必须使用两部分表指定从中提取数据的表
名称格式:schema_name.table_identifier。
行:1 字符:1
+ .\sqlpackage.exe `
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (参数 'T...ble_identifier.:String) [], RemoteException
    + FullQualifiedErrorId : NativeCommandError / 附近的语法不正确。

Ans*_*ers 5

的值作为单个参数$tableList传递,而不是参数列表。您实际上想要在这里做的事情称为splatting

$cs = "Data Source=${ServerName};Initial Catalog=${SourceDbName};" +
      'User ID=my_user;Password=my_password'

$params = '/a:Export',
          "/scs:`"${cs}`"",
          "/tf:${BacPacFileName}",
          '/p:TableData=[dbo].[QRTZ_CALENDARS]',
          '/p:TableData=[dbo].[QRTZ_SCHEDULER_STATE]'

.\sqlpackage.exe @params
Run Code Online (Sandbox Code Playgroud)