Печать динамического SQL со значениями параметров - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу напечатать SQL-запрос, который используется в хранимой процедуре ниже, со значениями параметров. В настоящее время он печатает запрос SQL без параметра Подстановка значений при выполнении хранимой процедуры. Он печатает параметры как есть (например AND TP.F_LANGUAGE = @LANGUAGE)

CREATE PROCEDURE [dbo].[SEARCH]
    @LANGUAGE VARCHAR(2),
    @SUBFORMAT NVARCHAR(2000),
    @ICO NVARCHAR(4000),
AS
    SET NOCOUNT ON

    DECLARE @sqlQuery AS NVARCHAR(MAX)
    DECLARE @pdfQuery AS NVARCHAR(MAX)
    DECLARE @htmlQuery AS NVARCHAR(MAX)
    DECLARE @param AS NVARCHAR(3000)
    DECLARE @paramDefinition AS NVARCHAR(3000)

    DECLARE @AllSubformats AS SubformatType
    DECLARE @InputSubformats AS SubformatType

    INSERT INTO @AllSubformats(Val)
        SELECT S.Val
        FROM (SELECT IsNull(TLK.f_value, '') As FValue
              FROM T_LOOKUP TLK
              WHERE TLK.f_parent = 'WEBVIEWER_INT_SUB') TLV
        CROSS APPLY dbo.dfnSplit(TLV.FValue, ',') S;

    IF (@SUBFORMAT <> '-1')
    BEGIN
        INSERT INTO @InputSubformats(Val)
            SELECT S.Val
            FROM dbo.dfnSplit(@SUBFORMAT, ',') S
    END;

    SET @pdfQuery = 'SELECT   TOP 1001 TP.F_PRODUCT AS ID,
        TP.F_PRODUCT_NAME AS NAME,
        FROM PDF_DETAILS TP '
        WHERE TP.F_PRODUCT<>'''''


SET @param = ' AND TP.F_AUTHORIZED IN(1,3) AND EXISTS (SELECT 1 FROM @AllSubformats ASF WHERE ASF.Val = TP.F_SUBFORMAT)'

IF NOT(@LANGUAGE IS NULL OR @LANGUAGE = '')
        SET @param = @param + '  AND TP.F_LANGUAGE = @LANGUAGE '

IF NOT(@SUBFORMAT IS NULL OR @SUBFORMAT = '')
        SET @param = @param + ' AND EXISTS (SELECT 1 FROM @InputSubformats ISF WHERE ISF.Val = TP.F_SUBFORMAT) '

IF NOT(@ICO IS NULL OR @ICO = '')
        SET @param = @param + ' AND (TP.F_ICO_DATA LIKE @ICO) '


    SET @ParamDefinition =  ' @SUBFORMAT NVARCHAR(2000),
                             @LANGUAGE VARCHAR(2), @ICO NVARCHAR(4000),@AllSubformats SubformatType READONLY, @InputSubformats SubformatType READONLY ' 

SET @sqlQuery = @pdfQuery +  @param 


    EXECUTE SP_EXECUTESQL @sqlQuery, @paramDefinition, @SUBFORMAT, @LANGUAGE, @ICO, @AllSubformats, @InputSubformats

Print @sqlQuery 

Пожалуйста, помогите. Я хочу отладить и выполнить SQL-запрос.

1 Ответ

1 голос
/ 22 апреля 2019

Вы можете распечатать результат функции ЗАМЕНА. Вам нужно было бы вставить REPLACE для каждого параметра в строке:

PRINT REPLACE(
        REPLACE(@sqlQuery, '@Parameter1', @Parameter1)
      , '@Parameter2', @Parameter2
);

Обратите внимание, что предполагается, что все ваши параметры являются строковыми типами. Если какие-либо из них не являются строковыми, вам нужно их ЗАСТАВИТЬ в строки внутри ЗАМЕНЫ.

...