首页 > 解决方案 > Invoke-Sqlcmd - 如何向包含冒号的 SQL 提供变量

问题描述

我在许多 PS 脚本中使用过这种类型的编码:

$SQlScriptParameters = (
    "FtpServer='$FtpServer'", 
    "RotkatalogFörFTP='$RootFolderOnFtpServer'",
    "HostUrlForWebAuthorization='$HostUrlForWebAuthorization'",
    "UrlForSsekListener='$UrlForSsekListener'",
    "RotkatalogFörAvstämningar='$RootFolderForReconciliations'",
    "UrlFörWebbtjänsten='$UrlForWebSite'"
)
$result = Invoke-Sqlcmd -ServerInstance '(local)' -Database "$DatabaseName" -InputFile "$SqlAdaptSystemParameters" -QueryTimeout $maxQueryTime -AbortOnError -Variable $SQlScriptParameters

它工作正常,直到其中一个变量的值中包含一个冒号(如$HostUrlForWebAuthorization)。现在我收到以下解析错误:

Invoke-Sqlcmd : 
At line:1 char:1
+ Invoke-Sqlcmd -ServerInstance '(local)' -Database "$DatabaseName" -In ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserException
    + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

在 Windows PowerShell ISE 调试器中显示时,字符串数组中的字符串值$SQlScriptParameters如下:

HostUrlForWebAuthorization='http://ensymappacc1.cypointmo.local:80/'

这是它在 SQL 输入文件中的样子

SET NOCOUNT ON

DECLARE @FtpServer nvarchar(500)
DECLARE @RotkatalogFörFTP nvarchar(500)
DECLARE @HostUrlForWebAuthorization nvarchar(500)
DECLARE @UrlFörSsekLyssnaren nvarchar(500)
DECLARE @RotkatalogFörAvstämningar nvarchar(500)
DECLARE @UrlFörWebbtjänsten nvarchar(500)

-- Format: uname:pwd@hostname:port
SET @FtpServer = $(FtpServer)

SET @RotkatalogFörFTP = $(RootFolderForFTP)

-- Format: http://hostname:port/
SET @HostUrlForWebAuthorization = $(HostUrlForWebAuthorization)

SET @UrlFörSsekLyssnaren = $(UrlFörSsekLyssnaren)

SET @RotkatalogFörAvstämningar = $(RotkatalogFörAvstämningar)

-- Format:  https://hostname:port/
SET @UrlFörWebbtjänsten = $(UrlFörWebbtjänsten)

如何设置$SQlScriptParameters这样我就不会在冒号上收到解析错误?

标签: powershellinvoke-sqlcmd

解决方案


推荐阅读