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

Azure SQL中SSMS生成表CREATE脚本不显示新建索引的问题

具体原因

这个问题和索引创建是否成功无关,本质是SSMS生成表脚本的默认规则限制,结合你使用系统版本控制时态表的场景,对应原因如下:

  • 你创建的非聚集索引本身是正常生效的——能在索引列表查到索引、创建后数据库性能提升这两点,已经可以确认索引没有创建失败、不存在元数据异常。
  • SSMS的「Script Table as Create To」功能默认配置下,不会为表的非聚集索引生成脚本,默认只会导出表结构、主键约束、系统版本控制关联关系这类核心对象,普通非聚集索引属于默认被排除的脚本内容。
  • 如果你执行Azure索引建议时,索引是建在时态表关联的历史表上,那主表的创建脚本本身就不会包含历史表的附属对象:历史表是和主表关联的独立表,SSMS默认不会把历史表的索引、约束这类对象合并到主表的创建脚本里。
解决步骤
  1. 先确认索引的实际归属,执行如下SQL,替换成你自己的索引名即可:
    SELECT 
        t.name AS 所属表名,
        t.temporal_type_desc AS 表时态类型,
        i.name AS 索引名,
        i.type_desc AS 索引类型
    FROM sys.indexes i
    INNER JOIN sys.tables t ON i.object_id = t.object_id
    WHERE i.name = N'你新建的非聚集索引名称'
    
  2. 修改SSMS的脚本生成默认规则:
    • 打开SSMS顶部菜单栏的「工具」-「选项」
    • 依次展开「SQL Server 对象资源管理器」-「脚本」节点
    • 在右侧配置列表里找到「编写索引脚本」,把值修改为True
    • 如果你要导出的索引在历史表上,再找到「编写时态表脚本」分类下的「包含历史表对象」选项,设置为True
  3. 配置保存后,重新使用「Script Table as Create To」生成脚本,就能看到你之前创建的非聚集索引了。

注意:不要反复执行索引创建语句,索引已经正常存在并生效,重复创建会触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:51:17