2017-01-30 5 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 

しかし、あなたがファイルを持っている場合は、あなただけのSQLでのみ、そのように理解する原因となるT-SQL変数を使用する必要があります。

Invoke-Sqlcmd -InputFile "C:\Folder\SQLCmd.sql" 

・ホープ助けになる。フォーマット文字列を使用することです

$sqlParameters = 'CONTOSO\cmpsvc'" 
Invoke-SqlCmd -Query ($ExecutionContext.InvokeCommand.ExpandString(Get-Contents 'my_file.sql')) 

それとも簡単な方法:あなたがそれを行うことができ

+0

CREATE LOGIN [{0}] FROM WINDOWS; USE test EXEC sp_addrolemember N'db_owner', N'$sqlParameters' GO 

次に、あなたのPowerShellのコードは、この来ることでしょう。 –

+0

ねえ、実際には変数が気に入らないのですか? –

+0

Invoke-Sqlcmd:ユーザーまたはロール '$ name'はこのデータベースに存在しません。ラインで :10文字:1 +起動-SQLCMDは-Query $クエリ –

0

一つの方法は、このような何かを変数の展開を行うにはPowerShellをGet-Contentsを使用して、取得することです。これにファイルの内容を変更します。多くのおかげで、あなたの第二ソリューションが御馳走を働いた

$sqlParameters = 'CONTOSO\cmpsvc'" 
Invoke-SqlCmd -Query ((Get-Contents 'my_file.sql') -f $sqlParameters) 
+0

奇妙なことに、私はこれらのいずれかを動作させることはできません、誰もが別のアイデアを持っていますか?私がしたいのは、Powershell変数に基づいてDBに権限を追加するだけです。 –

関連する問題