Если вы напечатаете значение @Query
, вы увидите корень ошибки. Так что, если вы запустите следующий код:
DECLARE @DOMAIN NVARCHAR = N'XXX';
DECLARE @QUERY NVARCHAR(MAX)= '
SELECT * FROM OPENQUERY( [XX\XX],''
SELECT CONCAT(CONCAT([Firstname],''),[Lastname]) AS [Owner]
FROM [XXX].[dbo].[Employee] '')'
PRINT @QUERY
Вы получите следующий результат:
SELECT * FROM OPENQUERY( [XX\XX],'
SELECT CONCAT(CONCAT([Firstname],'),[Lastname]) AS [Owner]
FROM [XXX].[dbo].[Employee] ')
Теперь понятно, почему SQL Server возвращает
Незакрытая кавычка после ..
Чтобы решить эту проблему, вам нужно помнить, что для того, чтобы в выводе строковой переменной была одинарная кавычка, нужно поставить две одинарные кавычки.
Теперь вам нужно переписать его, как показано ниже:
DECLARE @DOMAIN NVARCHAR = N'XXX';
DECLARE @QUERY NVARCHAR(MAX)= '
SELECT * FROM OPENQUERY( [XX\XX],''
SELECT CONCAT(CONCAT([Firstname],''''),[Lastname]) AS [Owner]
FROM [XXX].[dbo].[Employee] '')'
PRINT @QUERY
вышеупомянутый запрос выдаст:
SELECT * FROM OPENQUERY( [XX\XX],'
SELECT CONCAT(CONCAT([Firstname],''),[Lastname]) AS [Owner]
FROM [XXX].[dbo].[Employee] ')
Теперь вы можете просто заменить Print
на команду EXECUTE
и выполнить ее!