Передача параметров в хранимую процедуру с использованием пакетного файла SQLCMD - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь передать некоторые параметры в SQL Серверную хранимую процедуру с использованием файла .bat, но получаю неправильную синтаксическую ошибку.

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

Вот командный файл:

@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

Я получаю эту ошибку:

ОШИБКА - неверный синтаксис команды

Я не понимаю, почему происходит сбой и чтение документация не помогает в решении этой c проблемы.

1 Ответ

1 голос
/ 20 января 2020

Сначала вам нужно развернуть (создать) SP в вашей целевой базе данных. Если c: \ sp_TEST. sql содержит SQL из sp_TEST, вы просто развертываете его, а не запускаете, и для создания SP не требуются параметры.

-v - для указания sqlcmd параметр, а не параметр SP. Чтобы вызвать SP с данным параметром, вам нужно определить параметр sqlcmd в sql для вызова SP:

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

Спасибо @ Jeroen за комментарии. Он также работает без использования переменной sqlcmd:

sqlcmd -S %SQLInstance% -d %DatabaseName% -l0 -U %BPOUserName% -P %BPOPassword%  -Q"EXEC sp_TEST @Username='%test1%'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...