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}' 

は、単一のノードを選択する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。私は RC 2 v14.0.900.75を使用しています。

+0

疑似カラムについては、https://stackoverflow.com/q/195530/814206を参照してください。 –

答えて

0

Workarround:あなたは、テーブル値関数で$node_idのエイリアスを定義し、代わりに疑似列のあなたの選択であることを使用することができます。

ALTER function [dbo].[SitesByName](
    @sitename as NVarChar(max)) 
RETURNS TABLE 
WITH SCHEMABINDING 
AS 
    return select 
     $node_id [NodeId], 
     [SiteName], 
     [EndPoint], 
     [SiteNameHash], 
     [EndPointHash] 
    from [dbo].[Sites] 
    where [SiteNameHash] = CHECKSUM(@sitename) AND 
     [SiteName] = @sitename; 

事実であればSSMS赤い波線ライン(おそらくエラーが表示されますか、テキストと[SitesByName]下の警告):いいえ列が列に指定されていない

'1' 'SitesByName' の