Параметризованный запрос для связанного сервера - PullRequest
1 голос
/ 17 апреля 2019

Привет, я последовал примеру для параметризации openqueries, и это был один из способов избежать всех уродливых кавычек.

DECLARE @uap NVARCHAR(50) 
SELECT @uap = 'UAP1'    
EXEC MACPAC.master.dbo.sp_executesql
N'SELECT RD6001 as Referencia,
         RD6002 as UAP,
         RD6030 as QTD_AB_PDP_W01, 
         RD6031 AS QTD_AB_PDP_W02 
FROM D805DATPOR.TRP060D 
WHERE RD6001 not like ''%OP%''
AND RD6001 not like ''%PT%'' 
AND RD6002 = @uap',
N'@uap nvarchar(50)',
@uap

это пример

DECLARE @VAR char(2)
SELECT  @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR

однако мой подходне работает

Поставщик OLE DB "IBMDA400" для связанного сервера "MACPAC" возвратил сообщение "SQL0104: токен {недействителен. Допустимые токены: (CL END GET SET CALL DROP FREE HOLD LOCK OPEN WITH OPEN WITHALTER BEGIN. Причина ... ...: на токене обнаружена синтаксическая ошибка {. Token {не является допустимым токеном. Частичный список допустимых токенов: (CL END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER BEGIN.list предполагает, что оператор верен с точностью до токена. Возможно, ошибка была раньше в выражении, но синтаксис оператора, по-видимому, действителен до этого момента. Восстановление ...: выполните одно или несколько из следующих действий и попробуйтезапрос снова: - Проверьте оператор SQL в области токена {. Исправьте оператор. Ошибка может быть отсутствующей запятой или кавычкой, это можетбыть словом с ошибкой, или это может быть связано с порядком пунктов.- Если токен ошибки - исправьте оператор SQL, поскольку он не заканчивается допустимым предложением. ". Msg 7212, Уровень 17, Состояние 1, Строка 8 Не удалось выполнить процедуру sp_executesql 'на удаленном сервере' MACPAC '.

ОБНОВЛЕНИЕ

Я забыл упомянуть, что провайдером связанного сервера является IBM, поэтому я думаю, что это ORACLE, которого я не знал об этой детали.

Вот предлагаемый подход для выполнения параметризованных запросов к связанному серверу, который ORACLE

DECLARE @UAP NVARCHAR(50)
SET @UAP = 'UAP1'
EXEC ('SELECT RD6001 as Referencia,
       RD6002 as UAP,
       RD6030 as QTD_AB_PDP_W01 
       FROM D805DATPOR.TRP060D 
       where RD6001 not like ''%OP%'' 
       and RD6001 not like ''%PT%'' 
       and RD6002 = ?', @UAP) 
AT MACPAC

Для получения дополнительных параметров просто добавьте имя столбца и добавьте еще один ?

. Это прекрасно работает, и это оченьчистить!

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