带有部分密钥的SQL Server聚簇索引

Mik*_*234 -1 sql sql-server indexing

主键由4列组成但在聚簇索引中只包含其中3列的SQL是什么?

是否可以在SQL Server Management Studio中执行此操作?

mar*_*c_s 5

您需要定义两个单独的东西:

  1. 四列上的非群集主键

    ALTER TABLE dbo.YourTable
    ADD CONSTRAINT PK_YourTable
    PRIMARY KEY NONCLUSTERED (Col1, Col2, Col3, Col4)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 四列中有三列的单独聚类索引:

    CREATE CLUSTERED INDEX CIX_YourTable
    ON dbo.YourTable(Col1, Col3, Col4)  
    -- adapt this to use those three columns you want
    
    Run Code Online (Sandbox Code Playgroud)

是的 - 当然你可以在SQL Server Management Studio中执行那些T-SQL脚本:-)

更新:要使用clicky-mousy-GUI工具在GUI中执行此操作,您需要执行以下步骤:

  1. 在对象资源管理器中,在您的表上,您需要首先定义聚集索引,方法是Indexes > New Index > Clustered Index- 为其命名并添加所需的列

  2. 你已经做到了这一点之后,那么你可以定义通常的表设计视图中的主键,因为已经有一个聚集索引,它会成为一个非聚集主键

我还没有找到任何其他方法 - 如果您先创建主键,它将成为一个群集主键,我发现创建它之后无法更改它

  • @ MikeAlike234也许你应该学会不使用GUI (4认同)
  • @ MikeAlike234如果您需要强制列的唯一性,那么该列必须是*an*index中的键列.(PK和唯一约束作为索引在封面下实现.)因此,我不确定如何将列作为键但不在索引中. (4认同)