You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2016链接2019实例:查询正常但无法插入临时表

SQL Server跨版本链接服务器插入临时表问题

版本信息

SQL Server 2016版本:

Microsoft SQL Server 2016 (SP3) (KB5003279) - 13.0.6300.2 (X64)   Aug  7 2021 01:20:37 Copyright (c) Microsoft Corporation  
Standard Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) 

SQL Server 2019版本:

Microsoft SQL Server 2019 (RTM-CU16) (KB5011644) - 15.0.4223.1 (X64)   Apr 11 2022 16:24:07   Copyright (C) 2019 Microsoft Corporation  
Standard Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) 

问题场景与现象

  • 有多台SQL Server 2016和2019实例,需汇总所有服务器数据生成报表,通过一台服务器以链接服务器方式连接其他实例执行查询。
  • 此前仅2016实例间操作正常,跨2016到2019时出现问题。
  • 最初使用OPENQUERY执行查询,跨版本场景下无法工作;修改为通过EXEC [LinkedServerSQL2019].msdb..sp_executesql执行查询后,从2016实例执行可正常返回结果:
EXEC [LinkedServerSQL2019].msdb..sp_executesql N'SELECT top 10   event_time, action_id, 
   succeeded, class_type, server_principal_name,target_database_principal_name, 
   database_name, object_name, statement, additional_information,t.host_name, 
   program_name
FROM [sys].[fn_get_audit_file] (
    ''FilePath*.sqlaudit'',
    NULL,
    NULL
) t 
LEFT JOIN sys.dm_exec_sessions e ON e.session_id=t.session_id 
                                 AND e.login_name = t.server_principal_name 
WHERE [event_time] >= dateadd(day,-1,GETUTCDATE())
  AND succeeded = 1  
  AND action_id = ''LGIS'' ';
  • 但尝试将结果插入2016本地临时表时操作失败:
-- 临时表创建于SQL Server 2016实例
CREATE TABLE #TempDump 
(
    event_time datetime, 
    action_id varchar(100), 
    succeeded bit, 
    class_type varchar(10),  
    server_principal_name nvarchar(max),
    target_database_principal_name nvarchar(max), 
    database_name varchar(max), 
    object_name varchar(max), 
    statement varchar(max), 
    additional_information varchar(max), 
    host_name varchar(max), 
    program_name varchar(max)
)

INSERT INTO #TempDump
EXEC [LinkedServerSQL2019].msdb..sp_executesql N'SELECT top 10   event_time, action_id, 
  succeeded, class_type, server_principal_name,target_database_principal_name, 
  database_name, object_name, statement, additional_information,t.host_name, 
  program_name
FROM [sys].[fn_get_audit_file] (
    ''FilePath*.sqlaudit'',
    NULL,
    NULL
) t 
left join  sys.dm_exec_sessions e on e.session_id=t.session_id and 
   e.login_name=t.server_principal_name 
WHERE  [event_time] >= dateadd(day,-1,GETUTCDATE())
  and succeeded=1 and action_id=''LGIS'' ';
  • 执行上述插入语句触发错误(错误信息见截图),无法理解为何单独查询正常,但插入临时表失效?该操作在2016实例间可正常完成,仅跨版本时出现问题,求解决思路。

内容的提问来源于stack exchange,提问作者Danielle Paquette-Harvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:54:17