SQL Server根据父记录查询更新子节点

时间:2017-06-06 05:11:19

标签: sql sql-server stored-procedures

我正在尝试在SQL Server表中使用以下结构查询数据 '表A'用列'节点' (varchar)和'目的地' (位)。节点列中的数据基于父/子关系。行子:1001111001将所有这些行/节点作为父项(100111100,10011110,1001111,100111,10011,1001,100,10,1)。我想在sql server

上的存储过程中完成以下操作

1-检索子节点的所有父节点。

2-如果所有父目的地等于0

,则更新子行的目的地

2 个答案:

答案 0 :(得分:0)

试试这个:::

CREATE PROCEDURE UP_PROCEURENAME
@tablename varchar(30)
AS
BEGIN
 DECLARE @cnt INT = 1
 WHILE @cnt < len(destination)
 (select left(destination, len(destination)-@cnt) AS Parents from @tablename
 set @cnt = @cnt + 1)
 END LOOP
 GO
 IF(LEFT(destination,LEN(destination)-1) = 0)
   UPDATE @tablename
   SET destination =   ------YOUR UPDATE STATEMENT
END

EXEC UP_PROCEURENAME TableA

答案 1 :(得分:0)

SELECT ones.n + 10*tens.n + 100*hundreds.n + 1 AS Num,
    Left(@S, ones.n + 10*tens.n + 100*hundreds.n + 1) as ParentNode,
    t.Destination as ParentDestination
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
         (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
         (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
         tableA t 
WHERE ones.n + 10*tens.n + 100*hundreds.n BETWEEN 0 AND Len(@s)-2 AND t.Node = Left(@S, ones.n + 10*tens.n + 100*hundreds.n + 1)
ORDER BY ones.n + 10*tens.n + 100*hundreds.n

对于更新,您现在可以检查所有父目的地的SUM是否为0