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

SQL Server 2019链接服务器表CREATE生成选项置灰,如何获取建表语句?

解决链接服务器表无法生成CREATE脚本的问题

方法一:通过系统视图手动拼接CREATE语句

直接查询链接服务器的系统元数据视图,获取表的列、约束等信息后手动拼接脚本:

  1. 查询列基础信息:
SELECT 
    c.name AS column_name,
    t.name AS data_type,
    CASE 
        WHEN t.name IN ('varchar', 'nvarchar', 'char', 'nchar') THEN CONCAT(t.name, '(', CASE c.max_length WHEN -1 THEN 'MAX' ELSE CAST(c.max_length AS VARCHAR) END, ')')
        WHEN t.name IN ('decimal', 'numeric') THEN CONCAT(t.name, '(', c.precision, ',', c.scale, ')')
        ELSE t.name
    END AS full_data_type,
    CASE WHEN c.is_nullable = 1 THEN 'NULL' ELSE 'NOT NULL' END AS nullable,
    ISNULL(CONCAT('DEFAULT ', dc.definition), '') AS default_constraint
FROM [LinkedServerName].[RemoteDBName].sys.columns c
JOIN [LinkedServerName].[RemoteDBName].sys.types t 
    ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
LEFT JOIN [LinkedServerName].[RemoteDBName].sys.default_constraints dc 
    ON c.default_object_id = dc.object_id
WHERE c.object_id = OBJECT_ID('[LinkedServerName].[RemoteDBName].[SchemaName].[TableName]')
ORDER BY c.column_id;
  1. 查询主键约束:
SELECT 
    CONCAT('PRIMARY KEY (', STRING_AGG(COL_NAME(c.object_id, c.column_id), ', '), ')') AS pk_constraint
FROM [LinkedServerName].[RemoteDBName].sys.key_constraints k
JOIN [LinkedServerName].[RemoteDBName].sys.index_columns ic 
    ON k.parent_object_id = ic.object_id AND k.unique_index_id = ic.index_id
JOIN [LinkedServerName].[RemoteDBName].sys.columns c 
    ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE k.type = 'PK' AND k.parent_object_id = OBJECT_ID('[LinkedServerName].[RemoteDBName].[SchemaName].[TableName]');

将两次查询结果组合,即可得到完整的CREATE TABLE语句。

方法二:使用SSMS生成脚本向导

  1. 在SSMS中右键点击链接服务器下的目标数据库,选择「任务」→「生成脚本」。
  2. 在向导中选择需要生成脚本的特定表,进入「设置脚本选项」步骤,确保勾选「编写CREATE TABLE脚本」等相关选项。
  3. 按向导提示完成操作,即可导出选中表的CREATE脚本。

方法三:用PowerShell调用SMO生成脚本

借助SQL Server管理对象(SMO)自动生成脚本:

# 加载SMO程序集(路径对应SQL Server 2019的SDK位置)
Add-Type -Path "C:\Program Files\Microsoft SQL Server\150\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"

# 连接远程服务器
$server = New-Object Microsoft.SqlServer.Management.Smo.Server "RemoteServerInstanceName"
$database = $server.Databases["RemoteDBName"]
$table = $database.Tables["TableName", "SchemaName"]

# 配置脚本选项
$scriptOpts = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
$scriptOpts.ScriptSchema = $true
$scriptOpts.ScriptData = $false # 不需要表数据则保持false

# 生成并保存脚本
$scriptContent = $table.Script($scriptOpts)
$scriptContent | Out-File "D:\Scripts\Create_Table.sql"

注意:需确保本地安装了SQL Server 2019 SDK,且远程服务器允许SMO访问。

关于CREATE To选项灰色的原因

SSMS右键菜单的Script Table As->CREATE To功能仅对本地服务器表提供完善支持,针对链接服务器的表,由于元数据获取权限限制或功能设计局限,该选项会处于不可用状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:05:39