sql-server - 将具有复合主键引用的列添加到分层表
问题描述
我正在尝试使用复合主键创建一个分层表。但是,我还希望按照官方文档设置 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)
现在基本上我有两个关于什么是可能的问题:
- 会
[ParentID] AS [NodeID].GetAncestor(1) PERSISTED REFERENCES [dbo].[OrderStatus](UserID, NodeID)
以某种方式进行设置吗?如果不是, - 如何解决
GetAncestor(1)
复合 PK?
提前感谢您的回答!
解决方案
推荐阅读
- vim - EasyMotion——通配符
- c# - .Net Core 3.1.6 ThreadLocal / ThreadStatic
- python-3.x - 如何在列表python中检查列表中的相同值
- c++ - 不正确的“for”循环结果 C++
- c++ - 在我的 C++ 程序中无法弄清楚模板嵌套类的语法
- javascript - 与 app.use(express.static(...)) 相关的 next() 中间件/路由是什么?
- sql - 通过 SQL 查询透视以前的 xml 数据会引发错误
- python - Django 更改和跟踪订单状态
- python - 十进制到二进制转换的列表理解中的 if/else
- c# - C#从基类调用重写的方法