从自引用表中获取所有子项(子代,子代)和父代 - c#

我想创建一个“可选方法”(无论它是视图还是函数,存储过程还是别的东西,我都不知道是否还有其他方法)来获取所有直接父母和所有孩子,自孙表中的,孙,孙代等记录。
我想从C#(.NET)调用的“可选方法”

我们有一个名为entities的表,(除其他外)它具有一个属性parentId,该属性引用Id表的entities字段。通过这种方式,我们可以对实体树进行建模(在我们的案例中,是建筑物,思想屋,地板,房间等的元素)

父节点(如果可视化)是形成到根元素的直线的节点。

子节点可以可视化地“展开”。

如果必须在两个单独的语句中进行选择就可以了。

在C#中,我知道如何执行此操作,但是我不想向数据库发出大量请求,并且我认为Sql Server本身可以快速执行此操作,但我不知道如何进行:-)

参考方案

尝试使用以下递归CTE作为解决方案的基础:

WITH TREE AS (
  SELECT     ROOT.Id        
            ,ROOT.ParentId  
            ,ROOT.Prop1
            ,ROOT.Prop2 
            ...
            ,ROOT.PropN                 
            ,1 AS Level 
  FROM       ENTITIES ROOT      
  -- list entities starting from ROOT node (no ParentId)
  WHERE      ROOT.ParentId IS NULL 
  -- or list entities starting from a specified node
  -- WHERE ROOT.Id = @entityId

  UNION ALL

  SELECT     CHILD.Id
            ,CHILD.ParentId 
            ,CHILD.Prop1
            ,CHILD.Prop2    
            ...
            ,CHILD.PropN                
            ,PARENT.Level + 1
  FROM       ENTITIES CHILD INNER JOIN 
             TREE PARENT ON CHILD.ParentId = PARENT.Id
  WHERE      CHILD.ParentId IS NOT NULL
)

SELECT *  FROM TREE

如果需要传递参数,可以将CTE放在VIEWStored Procedure内。

数学和科学方程式和Fomulas的数​​据类型-SQL Server 2008? - c#

我正在使用SQL Server2008。我有一个用于教育部门工作的小项目。为此,我需要存储数学和科学方程式和公式。这意味着数据可能包含带有上标和下标的值。我希望以相同的格式保存数据。是否有适合我需求的适当数据类型? 参考方案 如果此列专门用于存储数学方程式和科学公式,那么我将使用Xml列,然后将数据存储在MathML format中。文字段落,例如说明,可以…

将SQL Server Serilog接收器包装在Async中是否有意义? - c#

我正在尝试最大程度地减少从.NET Core应用程序将日志写入SQL Server的性能影响。过去,我将Serilog File接收器包装在Async接收器中-这极大地提高了性能。SQL Server sink documentation指出它将定期和/或在达到batchPostingLimit时批处理日志条目。我找不到有关它决定发出INSERT命令时发生的…

接收到连接到SQL Server 2008的SQLException“用户登录失败” - java

我正在尝试通过Java连接到SQL Server 2008。我已将sqljdbc4.jar添加到我的项目的库中。 没有为数据库访问数据库设置用户名和密码(Windows身份验证)。 1433端口正在侦听,但是我仍然收到此异常: SQL异常:com.microsoft.sqlserver.jdbc.SQLServerException:用户“”登录失败。 Cl…

SQL Joins与Java代码? - java

我有这样的查询Select Folder.name from FROM FolderTable,ValidFolder, ValidFolderGroup, ValidUser, ValidLocation, ValidDepartment where ValidUser.LocationCode *= ValidLocation.LocationCode …

实现继承在java.sql.Timestamp的javadoc中意味着什么? - java

来自JavaDoc of java.sql.Timestamp class(重点是我的)由于上述Timestamp类和java.util.Date类之间的差异,建议代码不要以java.util.Date的实例的形式一般性地查看Timestamp值。 Timestamp和java.util.Date之间的继承关系实际上表示实现继承,而不是类型继承。说实现继承而…