Передача параметров в правильном формате на связанный сервер - PullRequest
0 голосов
/ 03 сентября 2018

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

DECLARE 
 @QRY01 VARCHAR(8000)
,@WIP_PRM VARCHAR(12)
--START SEARCHING WIP_AUTO_KEY IN COST_AUDIT_LOG FROM LAST RECORD INCLUDED IN tbl_WIPLOG1
SET @WIP_PRM = CONVERT(VARCHAR(12),(SELECT MAX(WIP_AUTO_KEY)  FROM tbl_WIPLOG1))

    SET @QRY01 = ' 
    SELECT  * 
    FROM
    OPENQUERY(LINKED_SERVER,
    ''SELECT DISTINCT
     QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY
    ,QCTL.WIP_AUDIT_LOG.WOO_AUTO_KEY
    FROM QCTL.WIP_AUDIT_LOG 
    WHERE
    QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY > '+CHAR(39) + CHAR(39)+CAST(@WIP_PRM AS nvarchar(500))+CHAR(39) + CHAR(39)+N''')

    EXEC(@QRY01)

Похоже, что форматирование параметра внутри оператора OPENQUERY является неправильным или требует, чтобы перед ним было ключевое слово, чтобы обозначить его как текст, поскольку весь оператор заключен в квадратные скобки. Если я введу значение параметра, как показано ниже, запрос будет работать, но не в указанном выше формате.

 SET @QRY01 = ' 
    SELECT  * 
    FROM
    OPENQUERY(LINKED_SERVER,
    ''SELECT DISTINCT
     QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY
    ,QCTL.WIP_AUDIT_LOG.WOO_AUTO_KEY
    FROM QCTL.WIP_AUDIT_LOG 
    WHERE
    QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY > ''''1432697'''' '

EXEC(@QRY01)

Как я могу заставить запрос принять параметр в правильном формате?

1 Ответ

0 голосов
/ 04 сентября 2018

@ leon, вам нужно взять CHAR (39), чтобы упростить запрос.

Вот модифицированная версия ниже:

    DECLARE 
     @QRY01 VARCHAR(8000)
    ,@WIP_PRM VARCHAR(12)
    --START SEARCHING WIP_AUTO_KEY IN COST_AUDIT_LOG FROM LAST RECORD INCLUDED IN tbl_WIPLOG1
    SET @WIP_PRM = CONVERT(VARCHAR(12),(SELECT MAX(WIP_AUTO_KEY)  FROM tbl_WIPLOG1))

        SET @QRY01 = ' 
        SELECT  * 
        FROM
        OPENQUERY(LINKED_SERVER,
        ''SELECT DISTINCT
         QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY
        ,QCTL.WIP_AUDIT_LOG.WOO_AUTO_KEY
        FROM QCTL.WIP_AUDIT_LOG 
        WHERE
      QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY > '+CAST(@WIP_PRM AS nvarchar(500))+ N''')'

EXEC(@QRY01)

Это должно дать вам такой вывод:

    SELECT  * 
    FROM
    OPENQUERY(LINKED_SERVER,
    'SELECT DISTINCT
     QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY
    ,QCTL.WIP_AUDIT_LOG.WOO_AUTO_KEY
    FROM QCTL.WIP_AUDIT_LOG 
    WHERE
  QCTL.WIP_AUDIT_LOG.WIP_AUTO_KEY > 1432697')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...