Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 检查边表(图形数据库)中是否存在记录[以可重用的方式]_Sql Server_Graph Databases - Fatal编程技术网

Sql server 检查边表(图形数据库)中是否存在记录[以可重用的方式]

Sql server 检查边表(图形数据库)中是否存在记录[以可重用的方式],sql-server,graph-databases,Sql Server,Graph Databases,我希望有人能帮助我查询SQL Server中的graph edge表中是否存在记录 如果一个节点关系不存在,我想插入该关系。在“普通”SQL表中,我可以执行以下操作: IF NOT EXISTS ( SELECT [from], [to] FROM [EdgeTable] WHERE [from] = (SELECT [id] FROM [NodeTable] WHERE [data] = 'some value') AND [to] = (SELECT [id] FR

我希望有人能帮助我查询SQL Server中的graph edge表中是否存在记录

如果一个节点关系不存在,我想插入该关系。在“普通”SQL表中,我可以执行以下操作:

IF NOT EXISTS (
 SELECT
  [from],
  [to]
 FROM
  [EdgeTable]
 WHERE
  [from] = (SELECT [id] FROM [NodeTable] WHERE [data] = 'some value')
  AND [to] = (SELECT [id] FROM [NodeTable] WHERE [data] = 'some other value')
)
BEGIN
...
我的问题是,在MS Graph表中,它不是“from”和“to”,而是“$from\u id\uuxxxxx”和“$to\u id\uxxxxx”,其中xxxxx是十六进制代码

虽然有一次我可以将这些硬编码到我的SQL查询中,但我正在尝试构建一个脚本,可以跨多个数据库使用,因此每个数据库中的十六进制代码可能不同


我希望这是有道理的?

事实上,对不起,我当时真的很傻

我已经养成了在我的表和字段名周围放大括号的习惯。对于自动生成的图表表字段,您似乎无法做到这一点

这项工作:

SELECT 
  $from_id,
  $to_id
FROM 
  [audit].[tableMetaDataEdge]
WHERE
  $from_id = (SELECT $node_id FROM [audit].[tableMetaDataNode] WHERE [table] = '[staging].[dbo].[Customer]')
这并不是:

SELECT 
  [$from_id],
  [$to_id]
FROM 
  [audit].[tableMetaDataEdge]
WHERE
  [$from_id] = (SELECT [$node_id] FROM [audit].[tableMetaDataNode] WHERE [table] = '[staging].[dbo].[Customer]')
我想我需要写:

SELECT 
  [$from_id_F86BBF0BA19E42E281261CBC981504F6],
  [$to_id_82880261B4804F359608E084465D6535]
FROM 
  [audit].[tableMetaDataEdge]
WHERE
  [$from_id_F86BBF0BA19E42E281261CBC981504F6] = (SELECT $node_id FROM [audit].[tableMetaDataNode] WHERE [table] = '[staging].[dbo].[Customer]')

我不知道如何得到字段名的十六进制值。事实证明,通过去掉方括号,您实际上并不需要它们。

有关更多信息,我正在用Python构建一个“数据仓库生成器”,它将混合使用yml和基本SQL select查询。我希望它生成一个审计表,其中包含所有fact/dim/stg表及其源(和数据沿袭)。如果我能破解上面的问题,图表似乎是最好的方法。鉴于此Python脚本的性质,它将跨多个客户机用于构建其仓库,因此需要使用多个边缘表,这些边缘表似乎具有附加随机十六进制的字段。