调用包含Powershell变量的SQL脚本

时间:2017-01-30 09:59:55

标签: sql-server powershell sqlcmd

我似乎无法在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

詹姆斯

2 个答案:

答案 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)