sql-server
  • powershell
  • sqlcmd
  • 2017-01-30 1 views 2 likes 
    2

    Ich kann nicht scheinen, eine PS-Variable namens $sqlParameters in einem SQL-Skript verwendet werden, irgendwelche Hinweise auf was ich falsch mache?Rufen Sie ein SQL-Skript mit Powershell-Variablen

    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 
    

    James

    Antwort

    1

    Sie können so etwas wie dies versuchen:

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

    oder etwas ähnliches:

    [email protected]' 
    CREATE LOGIN [$sqlParameters] FROM WINDOWS; 
    USE test 
    EXEC sp_addrolemember N'db_owner', N'$sqlParameters' 
    GO 
    '@ 
    
    Invoke-Sqlcmd -Query $query 
    

    Aber wenn Sie eine Datei haben, dann haben Sie T-SQL-Variablen nur dazu führen, SQL werden verstehen, auf diese Weise nur benutzen:

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

    Hoffnung es hilft.

    +0

    Vielen Dank, Ihre zweite Lösung gearbeitet, um eine Leckerei. –

    +0

    Hey, eigentlich mag es die Variable nicht? –

    +0

    Invoke-Sqlcmd: Benutzer oder Rolle '$ name' existiert nicht in dieser Datenbank. In Zeile: 10 Zeichen: 1 + Invoke-Sqlcmd -query $ query –

    0

    Eine Möglichkeit, es tun könnte, ist Get-Contents zu verwenden und dann Powershell erhalten Sie die Variable Expansion zu tun, so etwas wie dieses:

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

    Oder eine einfachere Möglichkeit wäre, die Format-String zu verwenden. Ändern Sie Ihre Datei Inhalt dieses:

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

    Dann Code Powershell wäre dies kommen:

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

    Seltsam, wie ich keine von diesen zur Arbeit bekommen kann, Hat jemand eine andere Idee. Alles, was ich tun möchte, ist das Hinzufügen von Berechtigungen zu DBs basierend auf einer Powershell-Variable? –

    Verwandte Themen