我似乎无法在SQL脚本中使用名为$sqlParameters
的PS变量,这是我做错的任何线索?
的PowerShell:
$sqlParameters = "powerShellVar = 'CONTOSO\cmpsvc'"
invoke-sqlcmdInvoke SQL script using Powershell variables -inputfile "c:\temp\test.sql" -serverinstance SRVSCCM\MSSQLSERVER -variable $sqlParameters
SQL:
CREATE LOGIN [$sqlParameters] FROM WINDOWS;
USE test
EXEC sp_addrolemember N'db_owner', N'$sqlParameters'
GO
詹姆斯
答案 0 :(得分:1)
你可以尝试这样的事情:
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
或类似的内容:
$query=@'
CREATE LOGIN [$sqlParameters] FROM WINDOWS;
USE test
EXEC sp_addrolemember N'db_owner', N'$sqlParameters'
GO
'@
Invoke-Sqlcmd -Query $query
但是如果你有一个文件,那么你必须使用T-sql变量只会导致SQL只能以这种方式理解:
Invoke-Sqlcmd -InputFile "C:\Folder\SQLCmd.sql"
希望它有所帮助。
答案 1 :(得分:0)
你可以做的一种方法是使用Get-Contents
,然后让Powershell进行变量扩展,如下所示:
$sqlParameters = 'CONTOSO\cmpsvc'"
Invoke-SqlCmd -Query ($ExecutionContext.InvokeCommand.ExpandString(Get-Contents 'my_file.sql'))
或者更简单的方法是使用格式字符串。将文件内容更改为:
CREATE LOGIN [{0}] FROM WINDOWS;
USE test
EXEC sp_addrolemember N'db_owner', N'$sqlParameters'
GO
然后你的Powershell代码将会出现:
$sqlParameters = 'CONTOSO\cmpsvc'"
Invoke-SqlCmd -Query ((Get-Contents 'my_file.sql') -f $sqlParameters)