首页 > 解决方案 > sqlpackage表列表

问题描述

我正在尝试使用动态表列表从 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]

但是,当我将表列表放入 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)

错误文字:

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

标签: sql-serverpowershell

解决方案


的值$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

推荐阅读