Почему моя хранимая процедура всегда получает NULL-параметры? - PullRequest
0 голосов
/ 04 июля 2019

Я создал скрипт T-SQL, который очень хорошо работает, когда я выполняю его напрямую. Затем я поместил этот сценарий в хранимую процедуру с 2 параметрами, но когда я выполняю его, строки не затрагиваются ... тогда я обнаружил, что мои 2 параметра всегда принимаются как NULL моей хранимой процедурой.

Я пытался установить значения параметров по умолчанию в скрипте создания хранимой процедуры, но даже в этом случае они равны NULL.

Я пытался не объявлять параметры как скалярные переменные внутри @SQLString, так как они уже созданы с CREATE PROCEDURE в качестве параметров, но я получил ошибку:

Скалярная переменная должна быть объявлена ​​

когда я пытался выполнить свою хранимую процедуру.

CREATE PROCEDURE [dbo].[sp_InsertMetierEventRelation]
    @metier NVARCHAR(50),
    @evenement NVARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQLString NVARCHAR(4000)
    SET @SQLString = N'     
        DECLARE @rowId INT, @metier NVARCHAR(50), @evenement NVARCHAR(50)
        SELECT @metier AS metierParam -- always NULL
        SELECT @evenement AS evenementParam -- always NULL
        SELECT met_id FROM [dbo].[t_metier] WHERE [met_nom] = @metier 
        SELECT eve_id FROM [dbo].[t_evenement] WHERE [eve_nom] = @evenement 
        -- some other code
        '
        EXECUTE sp_executesql @SQLString
END
GO

Я называю свою хранимую процедуру следующим образом:

EXEC [dbo].[sp_InsertMetierEventRelation] 
           @metier = 'Organisation de mariage', 
           @evenement = 'Evènement religieux';

или так:

EXEC [dbo].[sp_InsertMetierEventRelation] 
           'Organisation de mariage', 'Evènement religieux';

Я получил тот же результат:

metierParam NULL 
evenementParam NULL 
met_id NO RESULT 
eve_id NO RESULT

1 Ответ

1 голос
/ 04 июля 2019

Вам нужен динамический SQL?Что произойдет, если вы упростите это как:

CREATE PROCEDURE [dbo].[sp_InsertMetierEventRelation]
    @metier NVARCHAR(50),
    @evenement NVARCHAR(50)
AS

    SELECT met_id FROM [dbo].[t_metier] WHERE [met_nom] = @metier 
    SELECT eve_id FROM [dbo].[t_evenement] WHERE [eve_nom] = @evenement 

, а затем запустите EXEC [dbo].[sp_InsertMetierEventRelation] ...

Если вам нужен динамический SQL, посмотрите ответ от Джона Каппеллетти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...