我可以在T-SQL数据库中进行递归SELECT

前端之家收集整理的这篇文章主要介绍了我可以在T-SQL数据库中进行递归SELECT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不确定在sql Server的数据库中是否可以这样做?

说,我有一张桌子:

@H_403_4@id INT nm NVARCHAR(256) cid INT --references [id]

和假设数据:

@H_403_4@id nm cid 1 Name 1 0 2 Name 2 0 3 Name 3 1 4 Name 4 3 5 Name 5 2 6 Name 6 4 7 Name 7 2

选择的逻辑应如下:

>说,我们有原始ID,我们称之为N.
>然后我们有一个查找ID,我们称之为X.然后我们这样做:

@H_403_4@SELECT [cid] FROM [TableName] WHERE [id]=X

并检查结果是否等于N.如果是,则返回该记录的[nm].如果结果为0,那么我们返回Null.如果结果是别的我们做同样的选择,除了X现在是结果值.

我显然可以用C#来做这件事,但我很好奇是否有可能在纯sql语句中结束?

PS.只是用上面的表格来说明这一点,如果N是1而X是6,那么我们得到:

@H_403_4@SELECT [cid] FROM [TableName] WHERE [id]=6 --results is 4 (not N or 0,then continue) SELECT [cid] FROM [TableName] WHERE [id]=4 --results is 3 (not N or 0,then continue) SELECT [cid] FROM [TableName] WHERE [id]=3 --results is 1 (is N,then return "Name 1")

或者如果N是1且X是7,我们得到:

@H_403_4@SELECT [cid] FROM [TableName] WHERE [id]=7 --results is 2 (not N or 0,then continue) SELECT [cid] FROM [TableName] WHERE [id]=2 --results is 0 (is 0,then return Null)

编辑:
我需要在sql Server 2008下运行它.

解决方法

@H_301_35@ 递归CTE可以做到这一点.它看起来像这样: @H_403_4@WITH q AS ( SELECT t.id,t.name,t.cid FROM t WHERE t.id = @x UNION ALL SELECT t.id,t.cid FROM q INNER JOIN t ON t.id = q.cid ) SELECT name FROM q WHERE id = @n

我们的想法是,CTE可以在UNION ALL子句的第二部分中引用自身,并且它将评估第二部分,直到它不再生成结果或达到内部限制.

原文链接:https://www.f2er.com/mssql/76564.html

猜你在找的MsSQL相关文章