Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 sys.index复合键显示空堆行。预期?_Sql Server_Tsql_Indexing - Fatal编程技术网

Sql server sys.index复合键显示空堆行。预期?

Sql server sys.index复合键显示空堆行。预期?,sql-server,tsql,indexing,Sql Server,Tsql,Indexing,我在一个表上有一个唯一的NC索引,当我通过sys.index查看它时,我看到两行 这是预期的吗 我需要确定类似ETL流程的PK SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(‘MyTable’) 输出是为您的观看乐趣而旋转的 object_id 4 5 name NULL PK_SchedName_LineNo index_id 0

我在一个表上有一个唯一的NC索引,当我通过
sys.index
查看它时,我看到两行

这是预期的吗

我需要确定类似ETL流程的PK

SELECT *
FROM sys.indexes
WHERE object_id = OBJECT_ID(‘MyTable’)
输出是为您的观看乐趣而旋转的

object_id           4       5  
name                NULL    PK_SchedName_LineNo 
index_id            0       6 
type                0       2 
type_desc           HEAP    NONCLUSTERED    
is_unique           0       1 
data_space_id       2       2 
ignore_dup_key      0       0 
is_primary_key      0       1
DDL如下所示:

CREATE TABLE [dbo].[Acc_ Schedule Line](
    [Seq] [INT] NOT NULL,
    [Schedule Name] [nvarchar](10) NOT NULL,
    CONSTRAINT [PK_SchedName_LineNo] PRIMARY KEY NONCLUSTERED 
    (
        [Schedule Name] ASC,
        [Line No_] ASC
    ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON
    , ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [Data Filegroup 1]
) ON [Primary]
GO

是的,因为原始表(在您的例子中是堆)也被视为索引。阅读Brent Ozar关于索引的一些文章。这是一个有趣的“轴心”——你是说
MyTable
同时拥有
object\u id
4和5吗?但是,通常情况下,这正是您希望看到的具有非集群主键的表。您没有指定聚集索引,因此它是一个堆表。只是为了澄清两个常见的误解:
唯一索引
唯一约束
主键
不同-从技术上讲,它们可能是表的主键,也可能是所谓的“候选键”,也唯一标识每行但不是主键的键。此外,这些都不一定是聚集索引——其中一个可以是聚集索引,但聚集索引不是必需的。而且,如果一个表没有聚集索引,在SQL Server中,它被视为一个堆,并显示为索引id为零。感谢您的出色响应,我很不好意思地在想——您知道的。是的,因为原始表(在您的例子中是一个堆)也被认为是一个索引。阅读Brent Ozar关于索引的一些文章。这是一个有趣的“轴心”——你是说
MyTable
同时拥有
object\u id
4和5吗?但是,通常情况下,这正是您希望看到的具有非集群主键的表。您没有指定聚集索引,因此它是一个堆表。只是为了澄清两个常见的误解:
唯一索引
唯一约束
主键
不同-从技术上讲,它们可能是表的主键,也可能是所谓的“候选键”,也唯一标识每行但不是主键的键。此外,这些都不一定是聚集索引——其中一个可以是聚集索引,但聚集索引不是必需的。而且,如果一个表没有聚集索引,在SQL Server中,它被视为一个堆,并显示为索引id为零。感谢您的出色响应,我很不好意思地在想——您知道的。英雄联盟