none
Powershell SQL Script aufrufen RRS feed

  • Frage

  • Hi, ich weiß nicht ob das hier das richtige Forum ist, aber ich habe folgendes Problem

    Ich rufe mittels der Powershell folgendes auf

    Invoke-Sqlcmd -InputFile $ExecuteSqlScript -Database $Database -ServerInstance $ServerInstance -Username "$Username" -Password "$Password" -v Zahl=4711

    mit dem -v Parameter übergebe ich eine Zahl einem SQL Script

    im SQL Script habe ich 
    DECLARE @MeineZahl int;
    SET @MeineZahl = '$(Zahl)' 

    bekomme aber
    Fehler beim Konvertieren des varchar-Werts "$(Zahl)" in den int-Datentyp.
    Wie bekomme ich die Variable MeinZahl richtig gesetzt?




    Freitag, 9. September 2022 11:32

Antworten

  • Hallo Thomas,

    sorry, dass es etwas gedauert hat. Bei mir funktioniert folgendes Problemlos.

    [SQL]

    DECLARE @MeineZahl int;
    SET @MeineZahl = $(Zahl);
    
    SELECT $(Zahl) AS Parameter, @MeineZahl AS Variable;

    [Powershell]

    Invoke-Sqlcmd -InputFile "X:\Ordner\Test.sql" -Variable Zahl=4711

    Wenn Du mehrere Parameter übergeben willst, dann bspw. so:

    $Variables = "Var1='Zeichenfolge'", "Var2=123"
    
    Invoke-Sqlcmd -InputFile "X:\Ordner\Test.sql" -Variable $Variables

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Donnerstag, 15. September 2022 07:10

Alle Antworten

  • Hallo Thomas,

    abgesehen davon, dass eine Zahl eine Zahl und kein String ist, die Hochkommata bei '$(Zahl)' also fehl am Platz sind, leitet das Back-Tick Zeichen (`=> accent grave) die Variablenerkennung bzw. -ersetzung ein. Siehe dazu:

      Invoke-Sqlcmd - Example 3: Invoke a script and pass in variable values from a string

    The $ signs in the SELECT statement that identify the SQLCMD variables are escaped using the back-tick (`) character.

    Schau dir auch mal diesen SO Thread an.

      Need help getting Invoke-Sqlcmd, -InputFile & -Variable working nicely together

    HTH

    Falls es nicht hilft, meld dich nochmal hier.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    • Bearbeitet Stefan Falz Freitag, 9. September 2022 13:52
    Freitag, 9. September 2022 13:46
  • Hi Stefan,
    mache ich '$(Zahl)'

    ohne ' denn bekomme ich aber folgenden fehler
    Falsche Syntax in der Nähe von "Zahl"
    SET @MeineZahl = $(Zahl)
    oder habe ich das jetzt falsch deklariert? Das wurde mir aus deinen Links auch nicht ganz klar
    Montag, 12. September 2022 11:03
  • Hallo Thomas,

    sorry, dass es etwas gedauert hat. Bei mir funktioniert folgendes Problemlos.

    [SQL]

    DECLARE @MeineZahl int;
    SET @MeineZahl = $(Zahl);
    
    SELECT $(Zahl) AS Parameter, @MeineZahl AS Variable;

    [Powershell]

    Invoke-Sqlcmd -InputFile "X:\Ordner\Test.sql" -Variable Zahl=4711

    Wenn Du mehrere Parameter übergeben willst, dann bspw. so:

    $Variables = "Var1='Zeichenfolge'", "Var2=123"
    
    Invoke-Sqlcmd -InputFile "X:\Ordner\Test.sql" -Variable $Variables

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Donnerstag, 15. September 2022 07:10
  • Hallo Thomas,

    Ich gehe davon aus, dass Stefans Codebeispiele Dir weitergeholfen haben. Solltest Du noch Rückfragen haben, gib bitte Bescheid.

    Gruß,
    Dimitar

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 29. September 2022 07:52
    Moderator