首页 > 解决方案 > 将具有复合主键引用的列添加到分层表

问题描述

我正在尝试使用复合主键创建一个分层表。但是,我还希望按照官方文档设置 ParentNode 。但是,由于我有一个来自 UserID 和 NodeID 的复合 PK,因此如果不在之后显式添加约束,我就无法让它工作。

这是相关的查询:

CREATE TABLE [dbo].[OrderStatus](
    [NodeID] HIERARCHYID NOT NULL,
    [StatusID] INT UNIQUE IDENTITY(1, 1) NOT NULL, 
    [Level] AS [NodeID].GetLevel(),
    [ParentID] AS [NodeID].GetAncestor(1) PERSISTED REFERENCES [dbo].[OrderStatus](UserID, NodeID),
    [Reason] NVARCHAR(MAX) NOT NULL,
    [Info] NVARCHAR(MAX),
    [SignatureRequired] BIT NOT NULL DEFAULT 0,
    [BarcodeRequired] BIT NOT NULL DEFAULT 0,
    [PhotoRequired] BIT NOT NULL DEFAULT 0,
    [UserID] INT NOT NULL,
    PRIMARY KEY (UserID, NodeID)
)
GO

CREATE INDEX [OrderStatus_BreadthFirst] ON [OrderStatus](Level, NodeID)
GO

INSERT INTO [dbo].[OrderStatus] (NodeID, Reason, UserID)
VALUES
('/', 'Root', 1),
('/0/', 'Fulfilled', 1),
('/1/', 'Partially fulfilled', 1),
('/2/', 'Not fulfilled', 1)

现在基本上我有两个关于什么是可能的问题:

  1. [ParentID] AS [NodeID].GetAncestor(1) PERSISTED REFERENCES [dbo].[OrderStatus](UserID, NodeID)以某种方式进行设置吗?如果不是,
  2. 如何解决GetAncestor(1)复合 PK?

提前感谢您的回答!

标签: sql-server

解决方案


推荐阅读