为什么使用TSQL查找连通图时会出现此错误?



nodes(nodeID int)是所有节点的列表。edges(fromNodeID int, toNodeID int)是两个节点之间的关系。假设图是无向的,找出所有连通的分量。

CREATE PROCEDURE getGraph
AS BEGIN
CREATE TABLE graphs (node int, id int);
DECLARE @graphID int;
SET @graphID = 0;

WHILE ((SELECT COUNT(*) FROM graphs) < (SELECT COUNT(*) FROM nodes))
BEGIN
CREATE TABLE currentGraph (node int);
CREATE TABLE temp(node int);
DECLARE @start int;
SET @start = (SELECT TOP (1) n.paperID
FROM nodes n
WHERE n.paperID NOT IN (SELECT * FROM graphs));
INSERT INTO currentGraph VALUES (@start);
INSERT INTO temp (node) VALUES (
SELECT e.citedPaperID
FROM currentGraph cg, edges e
WHERE cg.node = e.paperID
);

/* If there is any new node, keep searching for current graph*/
WHILE ((SELECT COUNT(*)
FROM temp
WHERE temp.node NOT IN (SELECT * FROM currentGraph)) <> 0)
BEGIN
INSERT INTO currentGraph (node) VALUES (
SELECT t.node
FROM temp t
WHERE t.node NOT IN (SELECT * FROM currentGraph)
);
DELETE FROM temp;

INSERT INTO temp (node) VALUES (
SELECT e.citedPaperID
FROM currentGraph cg, edges e
WHERE cg.node = e.paperID
);
END
SET @graphID = @graphID + 1;
INSERT INTO graphs (node, id) VALUES ((SELECT DISTINCT cg.node FROM currentGraph cg), @graphID);
END
END

错误信息:

[2021-10-02 21:52:07] [S1000][156] Incorrect syntax near the keyword 'SELECT'. [2021-10-02 21:52:07] [42000][102] Incorrect syntax near ')'.
[2021-10-02 21:52:07] [S1000][156] Incorrect syntax near the keyword 'SELECT'. [2021-10-02 21:52:07] [42000][102] Incorrect syntax near ')'.
[2021-10-02 21:52:07] [S1000][156] Incorrect syntax near the keyword 'SELECT'. [2021-10-02 21:52:07] [42000][102] Incorrect syntax near ')'.

INSERT语句语法错误。

你可以使用下列任意一种:

INSERT INTO YourTable (SomeColumn) VALUES (constant);
INSERT INTO YourTable (SomeColumn, OtherColumn) SELECT FirstColumn, SecondColumn FROM AnotherTable;
INSERT INTO YourTable (SomeColumn) VALUES ((SELECT SingleColumn FROM AnotherTable));

(我没有看其余代码的正确性,所以我不能确认在修复语法错误后是否解决了你的问题)

最新更新