【发布时间】:2013-02-06 21:59:09
【问题描述】:
是否有任何方法可以将列名与索引所具有的列名相匹配。
例如,假设 index1 使用列名称、年龄、地址,而 index2 使用(在同一个表中)名称、年龄。(全部用于一个特定表)
如果我将名称、年龄和表名传递给存储过程,我应该编写什么查询,它将返回 index2 而不是 index1。
我遇到过许多关于如何列出具有索引和表名的列的示例,例如:
How can we check that table have index or not?
但是在为我的使用编写 sql 查询时仍然遇到问题。
任何帮助将不胜感激,
谢谢
(适用于 Microsoft sql server 2008 - 2012)
这是我写的,它不能正常工作,因此问题
select index1.name,sys.tables.name, Stuff((SELECT ',' + sys.columns.name AS [text()]
FROM
(
select sys.columns.name
from sys.columns
inner join sys.index_columns On sys.index_columns.index_column_id=sys.columns.column_id
inner join sys.indexes on sys.indexes.index_id=sys.index_columns.index_id
where sys.indexes.index_id=index1.index_id
) x
For XML PATH (''), type ).value('(./text())[1]','NVARCHAR(MAX)'),1,1,'') As coLName
from sys.indexes as index1
inner join sys.tables on sys.tables.object_id=index1.object_id
inner join sys.index_columns On index1.index_id=sys.index_columns.index_id AND sys.index_columns.object_id = sys.tables.object_id
inner join sys.columns on sys.columns.column_id=sys.index_columns.column_id And sys.columns.object_id=sys.tables.object_id
where sys.tables.name=TABLE_NAME
【问题讨论】:
-
您使用的是哪个 RDBMS?
-
这是用于什么 SQL 产品?与键不同,在 SQL 中,索引几乎完全是特定于实现的,所以你必须知道你正在使用什么类型的 SQL 来编写这样的东西。
-
对不起,这是微软 sql server 2008-2012
标签: sql sql-server indexing