2017-01-30 42 views
2

我似乎无法得到一个名为$sqlParameters的PS变量在SQL脚本中使用,我做错了什么线索?调用一个包含Powershell变量的SQL脚本

的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 

詹姆斯

回答

1

你可以尝试这样的事:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'" 
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray 

或像这样:

[email protected]' 
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" 

希望它有助于。你可以做到这一点

+0

非常感谢,你的第二个解决方案工作一种享受。 –

+0

嘿,其实它不喜欢变量? –

+0

Invoke-Sqlcmd:此数据库中不存在用户或角色'$ name'。 在行:10字符:1 +调用-SQLCMD -Query $查询 –

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) 
+0

奇怪,因为我不能得到任何这些工作,是否有任何人有另一个想法。我想要做的只是添加基于Powershell变量的数据库的权限? –

相关问题