0
在節點表中,僞列名稱$node_id
引用節點id列的內部名稱,推薦使用僞列(請參閱SQL Graph Architecture §Node Table)。
例如創建如下表後:
create table [Sites](
[SiteName] NVarChar(max) NOT NULL,
[EndPoint] NVarChar(max),
[SiteNameHash] as CheckSum([SiteName]) PERSISTED NOT NULL,
[EndPointHash] as CheckSum([EndPoint]) PERSISTED NOT NULL,
INDEX IX_Sites_NodeId UNIQUE CLUSTERED ($node_id),
INDEX IX_Sites_SiteName UNIQUE NONCLUSTERED (SiteNameHash, $node_id),
INDEX IX_Sites_EndPoint UNIQUE NONCLUSTERED (EndPointHash, $node_id))
as Node;
查詢:
SELECT $node_id
,[SiteName]
,[EndPoint]
,[SiteNameHash]
,[EndPointHash]
FROM [EmersonAnalysis].[dbo].[Sites]
where $node_id = '{"type":"node","schema":"dbo","table":"Sites","id":0}'
使用僞列$node_id
在SELECT
-clause並在WHERE
-clause選擇單個節點(如果存在)。
然而,以下表值函數:
create function SitesByName(
@sitename as NVarChar(max))
RETURNS TABLE
WITH SCHEMABINDING
AS
return select
$node_id,
[SiteName],
[EndPoint],
[SiteNameHash],
[EndPointHash]
from [dbo].[Sites]
where [SiteNameHash] = CHECKSUM(@sitename) AND
[SiteName] = @sitename;
相似查詢:
select
fn.$node_id
from [Sites]
outer apply SitesByName([SiteName]) as fn
結果錯誤消息:
消息207,級別16,狀態1,第2行 無效的列名稱'$ node_id'。
當從函數中選擇列時,是否可以使用僞列名?如果是這樣,我該如何使用僞列名稱?
PS。我正在使用sql-server-2017 RC 2 v14.0.900.75。
有關僞列的信息,請參閱https://stackoverflow.com/q/195530/814206。 –