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

SQL Server Management Studio生成链接服务器表SELECT脚本时列重复

问题原因说明

这是SQL Server Management Studio (SSMS) v18.x全版本(包含你使用的18.8)的已知公开Bug,触发场景为针对链接服务器对象生成SELECT类脚本时,SSMS会重复读取元数据多次,导致列名被重复插入到生成的语句中,重复次数和链接服务器的数据源类型、本地元数据缓存状态有关。

修复方案
  • 根本修复:直接升级到SSMS 19.x及以上版本,微软已经在SSMS 19的首个正式版中修复了该Bug,升级后所有链接服务器脚本生成逻辑都会恢复正常。
临时替代方案(无法升级版本时使用)
  1. 拖拽列生成语句
    打开对象资源管理器,找到对应链接服务器下的目标表,展开表的「列」节点,直接将列文件夹拖拽到查询编辑器窗口,SSMS会自动插入所有无重复的列名,直接补充SELECT前缀和表名即可使用。
  2. 用系统视图自动生成脚本
    执行以下查询直接生成去重的SELECT语句,替换对应参数即可:
-- 替换语句中的链接服务器名、目标数据库名、Schema名、表名即可
DECLARE @linked_server NVARCHAR(128) = 'MyLinkedObject'
DECLARE @db_name NVARCHAR(128) = '你的数据库名'
DECLARE @schema_name NVARCHAR(128) = 'dbo'
DECLARE @table_name NVARCHAR(128) = 'UNIT_LOC'

DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT ''SELECT '' + STRING_AGG(''['' + name + '']'', '', '') + '' FROM ' + QUOTENAME(@linked_server) + '.' + QUOTENAME(@db_name) + '.' + QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name) + '''
FROM ' + QUOTENAME(@linked_server) + '.' + QUOTENAME(@db_name) + '.sys.columns 
WHERE object_id = OBJECT_ID(''' + QUOTENAME(@linked_server) + '.' + QUOTENAME(@db_name) + '.' + QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name) + ''')'

EXEC sp_executesql @sql
  1. 刷新元数据临时解决
    右键点击对应链接服务器,选择「刷新」清空本地缓存的元数据,再重新生成脚本,部分场景下可临时解决重复问题,但不保证长期生效。

内容的提问来源于stack exchange,提问作者Koughdur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:18:03