当前位置: 首页 > 面试题库 >

生成SQL Server数据库中所有索引和键的脚本

沃念
2023-03-14
问题内容

我正在寻找生成类似的脚本:

ALTER TABLE dbo.Person 
    ADD CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (PersonID);
    CREATE INDEX IX_EVT_EVENTS on EVT_EVENTS(prg_event_t1, prg_event_t2, num_order)

主要问题是我找不到我需要的所有信息,例如以下查询:

SELECT t.name TableName, I.* 
FROM sys.indexes I 
Inner Join sys.tables T on i.object_id=t.object_id

返回有关所有键和索引的信息,但是..没有“列名称”,我在哪里可以得到它们?

我也尝试了sys.all_columns和sys.key_constraints。


问题答案:

列名称存储在sys.columnssys.index_columns表中。

这将从所有表中选择列名称:

SELECT  sc.name
FROM    sys.tables st
        INNER JOIN sys.columns sc ON sc.OBJECT_ID = st.OBJECT_ID
WHERE   st.OBJECT_ID = 'ObjectID'

或与sys.indexes表联接,这将选择表名称和列:

SELECT  st.name ,
        sc.name
FROM    sys.indexes si
        INNER JOIN sys.tables st ON si.object_id = st.object_id
        INNER JOIN sys.columns sc ON sc.OBJECT_ID = st.OBJECT_ID

您可以WHERE在语句中添加一个子句以对索引列进行过滤

SELECT  si.name ,
        st.name ,
        sc.name
FROM    sys.indexes si
        INNER JOIN sys.tables st ON si.object_id = st.object_id
        INNER JOIN sys.columns sc ON sc.OBJECT_ID = st.OBJECT_ID
WHERE   si.name = 'IX_EVT_EVENTS'


 类似资料:
  • 问题内容: 对于为使用Microsoft SQL Server的应用程序生成安装程序的自动化安装程序生成,我目前正在评估是否可以进行以下操作: 我想以编程方式(CMD脚本或C#代码)在可从Microsoft SQL Server Management Studio2008访问的数据库上执行“生成脚本”功能。 即调用一些代码,并将指定数据库的所有对象(表,SP,约束等)作为SQL脚本。 目前,我只需

  • 问题内容: 似乎在elasticsearch中,您将在集合上定义索引,而在关系数据库中,您将在列上定义索引。如果整个集合都已建立索引,为什么需要对其进行定义? 问题答案: 不幸的是,使用了“索引”一词,这意味着ES和关系数据库中的一些事物(在编辑中非常不同),因为它们针对不同的用例进行了优化。 数据库中的“索引”是辅助数据结构,它使查询和查询变得快速,并且它们通常存储的值与表中显示的值完全相同。您

  • 如果不需要打开shell执行create index,直接在程序源代码里就能指定数据库索引,是不是很酷? 是的,利用bugu-mongo,你只需在程序里加上个@EnsureIndex注解,即可实现该功能。 以一个简单的新闻系统为例: @Entity @EnsureIndex("{type:1}") public class News implements BuguEntity{ @Id

  • 问题内容: 如何使用SQL(选择/存储过程/等)从SQL Server数据库生成所有表的DDL(带有外键,索引等)脚本?我需要除数据外的所有内容。 我 无法 使用Sql Server Management Studio,因为我想在将在Linux上运行的node.js脚本中使用它! 问题答案: 对于表:(您可以按以下方式工作) 程序如下:

  • 问题内容: 有没有一种方法可以获取实例中所有数据库中所有存储过程中引用的所有列和表?输出应为: 问题答案: 这将得到您想要的列表,但是,如果您在动态SQL中嵌入了此类列引用(并且可能找不到依赖于延迟名称解析的引用),则将无济于事。SQL Server不会解析存储过程的文本以提供DMV输出。 现在尝试使用子句来处理在同一服务器上具有不同归类的数据库的情况。 如果您的数据库处于80兼容模式,那么该语法

  • 问题内容: 考虑有一个名为的表: 该表在PeopleDb数据库中 现在,我想找到“ Mike”关键字。情况 : 我不知道要搜索哪个数据库,表。 我需要一个查询,它在所有数据库和表中进行搜索, 并向我显示以下内容: | Id | DatabaseName | TableName | ColumnName | Pk | SearchValue | 1 | ‘PeopleDb’ | ‘People’ |