Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 为什么PK在其索引中被列为包含列?_Sql Server 2008_Primary Key_Indexing - Fatal编程技术网

Sql server 2008 为什么PK在其索引中被列为包含列?

Sql server 2008 为什么PK在其索引中被列为包含列?,sql-server-2008,primary-key,indexing,Sql Server 2008,Primary Key,Indexing,我一直在使用Adventureworks2008R2研究索引,并被告知运行此查询 SELECT s.name AS SchemaName, OBJECT_NAME(i.object_id) AS TableOrViewName, i.name AS IndexName, c.name AS ColumnName FROM sys.indexes AS i INNER JOIN sys.index_columns AS ic ON i.object_i

我一直在使用Adventureworks2008R2研究索引,并被告知运行此查询

SELECT s.name AS SchemaName,
       OBJECT_NAME(i.object_id) AS TableOrViewName,
       i.name AS IndexName,
       c.name AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
  ON i.object_id = ic.object_id 
INNER JOIN sys.columns AS c
  ON ic.object_id = c.object_id
AND ic.column_id = c.column_id 
INNER JOIN sys.objects AS o
  ON i.object_id = o.object_id
INNER JOIN sys.schemas AS s
  ON o.schema_id = s.schema_id 
WHERE ic.is_included_column <> 0
  AND s.name <> 'sys'
ORDER BY SchemaName, TableOrViewName, i.index_id, ColumnName;
我理解为什么它会列出IX_uProductReview_ProductId_Name,但无法理解为什么它会显示PK_ProductReview_ProductReviewID

注释中解释说“根据定义,聚集索引中的所有列都已经包括在内。” 在这种情况下,为什么只显示注释列,而没有列出所有PK

我怀疑我真的很笨,但是。 短暂性脑缺血发作

--编辑 可以看出,表中具有包含列的非聚集索引的所有PK都显示为具有相同的包含列。
这就是“如何”的答案,但我仍然希望“为什么”的答案

这些连接条件中至少有一个似乎不充分。和都可以为同一
对象\u id
定义多个索引

尝试:

换句话说,我认为其中一行是由这个不正确的连接产生的幻影。您之所以看到它,是因为它恰好是同一个表上的另一个索引


顺便说一句,过滤系统对象(通常)的更好方法是将其包含在
WHERE
子句中,而不是查询对象所属的模式。

谢谢。为了发现问题。我的错误是盲目相信编写MOC培训课程的人,而不是仔细查看t-SQL代码。接近陡峭学习曲线的底部是我的借口谢谢你。提供额外建议
    SchemaName     TableorViewName   IndexName                          ColumnName
1   Production     Productreview     PK_ProductReview_ProductReviewID   Comments
2   Production     Productreview     IX_ ProductReview_ProductId_Name   Comments
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
  ON i.object_id = ic.object_id AND
    i.index_id = ic.index_id