我有以下查询,执行OPENQUERY:
DECLARE @DOMAIN NVARCHAR = N'XXX'
DECLARE @QUERY NVARCHAR(MAX)= '
SELECT * FROM OPENQUERY( [XX\XX],''
SELECT CONCAT(CONCAT([Firstname],''),[Lastname]) AS [Owner]
FROM [Employee] '')'
EXECUTE XX_executesql @QUERY
Run Code Online (Sandbox Code Playgroud)
当我执行时,出现以下错误:
消息 102,级别 15,状态 1,第 4 行 ')' 附近的语法不正确。消息 105,级别 15,状态 1,第 5 行 字符串 ')' 后的非封闭引号。
如果打印该@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
Run Code Online (Sandbox Code Playgroud)
您将得到以下结果:
SELECT * FROM OPENQUERY( [XX\XX],'
SELECT CONCAT(CONCAT([Firstname],'),[Lastname]) AS [Owner]
FROM [XXX].[dbo].[Employee] ')
Run Code Online (Sandbox Code Playgroud)
现在很清楚为什么 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
Run Code Online (Sandbox Code Playgroud)
上述查询将产生:
SELECT * FROM OPENQUERY( [XX\XX],'
SELECT CONCAT(CONCAT([Firstname],''),[Lastname]) AS [Owner]
FROM [XXX].[dbo].[Employee] ')
Run Code Online (Sandbox Code Playgroud)
您现在可以简单地替换Print为EXECUTE命令并执行它!