Próbuję przekazać kilka parametrów do procedury zapisanej SQL Server za pomocą pliku .bat, ale przytrzymuję nieprawidłowy błąd składni.

CREATE PROCEDURE sp_TEST 
    (@Username  VARCHAR(20))
WITH ENCRYPTION
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @USERID INT

    SET @USERID = (SELECT flduserid FROM BPOCORE..tblusers WHERE fldusername = @Username)

    UPDATE tbluserdetails 
    SET fldloggedon = 'No' 
    WHERE flduserid = @USERID
END

Oto plik wsadowy:

@ECHO OFF
NEW BATCH

ECHO. 
ECHO Welcome - enter details
ECHO. 

:Login
ECHO Type in the SQL Server and Login Details as noted below:
        ECHO SQLInstance:
        SET /P SQLInstance= 
        ECHO.
        ECHO DatabaseName
        SET /P DatabaseName=
        ECHO.
        ECHO BPOUserName:
        SET /P BPOUserName=
        ECHO.
        ECHO BPOPassword:
        SET /P BPOPassword=
        ECHO.
        ECHO enter_username
                set /v test1 =
        ECHO.

sqlcmd -S %SQLInstance% -d %DatabaseName% -l0 -U %BPOUserName% -P %BPOPassword%  -i c:\sp_TEST.sql -v test1
ECHO.
PAUSE&EXIT

Ciągle otrzymuję ten błąd:

Błąd - składnia polecenia jest niepoprawna

Nie rozumiem, dlaczego zawodzą i czytanie dokumentacji nie pomaga dla tego konkretnego problemu.

0
TheChannels 20 styczeń 2020, 21:59

1 odpowiedź

Najlepsza odpowiedź

Najpierw musisz wdrożyć (utwórz) SP w swojej docelowej bazie danych. Jeśli C: sp_test.sql zawiera SQL sp_test, wystarczy go, nie używasz go, a nie wymagane parametry do utworzenia Sp.

-V ma określić parametr SQLCMD, a nie parametr SP SP. Aby zadzwonić do SP z danym parametrem, musisz zdefiniować parametr SQLCMD w SQL, aby zadzwonić do SP:

sqlcmd -S %SQLInstance% -d %DatabaseName% -l0 -U %BPOUserName% -P %BPOPassword%  -Q"EXEC sp_TEST @Username='$(UserName)'" -v UserName="%test1%"

Dzięki komentarze @ Jeroen. Działa również bez użycia zmiennej SQLCMD:

sqlcmd -S %SQLInstance% -d %DatabaseName% -l0 -U %BPOUserName% -P %BPOPassword%  -Q"EXEC sp_TEST @Username='%test1%'"
0
PeterHe 20 styczeń 2020, 20:46