我正在尝试在SQL Server表中使用以下结构查询数据 '表A'用列'节点' (varchar)和'目的地' (位)。节点列中的数据基于父/子关系。行子:1001111001将所有这些行/节点作为父项(100111100,10011110,1001111,100111,10011,1001,100,10,1)。我想在sql server
上的存储过程中完成以下操作1-检索子节点的所有父节点。
2-如果所有父目的地等于0
,则更新子行的目的地答案 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