Во-первых, OPENQUERY
требует, чтобы второй параметр был строкой запроса.Строка в SQL Server записана в одинарных кавычках.Из OPENQUERY документации :
OPENQUERY ( linked_server ,'query' )
Мало того, что SQL, который появляется в этой строке, должен иметь любые одинарные кавычки, которые появляются в запросе для удвоения.Предположим, у вас есть SQL, который вы хотите выполнить следующий запрос:
SELECT * FROM some_table WHERE name='TT.';
Вы бы написали это как:
OPENQUERY(lks,'SELECT * FROM some_table WHERE name=''TT.''')
Но если у вас есть это в динамическом операторе SQL, это станет
DECLARE @s VARCHAR(MAX);
SET @s='SELECT * FROM OPENQUERY(lks,''SELECT * FROM some_table WHERE name=''''TT.'''''')';
Итак, вот какой-то взрыв одиночных кавычек даже для самых тривиальных запросов SQL.Подсчитайте кавычки, убедитесь, что сам запрос не соответствует действительности (т. Е. Кавычки были правильно удвоены).