Привет, я последовал примеру для параметризации 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
Для получения дополнительных параметров просто добавьте имя столбца и добавьте еще один ?
. Это прекрасно работает, и это оченьчистить!