ノードテーブルでは、疑似列名$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}'
は、単一のノードを選択するSELECT
-clauseおよびWHERE
-clauseに擬似カラム$node_id
を使用して、次の表を作成した後、例えば
(存在する場合)。
ただし、次の表値関数について:
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を参照してください。 –