SQL命令在实现递归时未正确结束错误
当我运行上述代码时,我得到错误语句SQL命令没有正确结束。请指导我。您的问题很好。是RexTester中几乎完全相同查询的一个示例 如果您得到一个错误,那么在这个代码之前可能有代码。这将导致错误。使用分号可以防止以后的代码出现问题 首先,递归子句应该显式列出列。不要使用select*和select,并期望两者匹配。因此,请列出以下列:SQL命令在实现递归时未正确结束错误,sql,sql-server,Sql,Sql Server,当我运行上述代码时,我得到错误语句SQL命令没有正确结束。请指导我。您的问题很好。是RexTester中几乎完全相同查询的一个示例 如果您得到一个错误,那么在这个代码之前可能有代码。这将导致错误。使用分号可以防止以后的代码出现问题 首先,递归子句应该显式列出列。不要使用select*和select,并期望两者匹配。因此,请列出以下列: WITH TBL AS ( SELECT * FROM OUTPUT WHERE PRODUCT_ID = 5 UNION ALL SELECT
WITH TBL AS
(
SELECT * FROM OUTPUT WHERE PRODUCT_ID = 5
UNION ALL
SELECT O.PRODUCT_ID,O.PRODUCT_NAME,O.PARENT_ID,O.PARENT_PRODUCT_NAME
FROM OUTPUT O
JOIN TBL T1 ON O.PRODUCT_ID = T1.PARENT_ID
)
SELECT * FROM TBL
WHERE PRODUCT_ID <> 5
OPTION(MAXRECURSION 1000);
第二,您的名字中不应该有父产品名称。您有父ID。请使用该ID查找名称。您的查询没有问题。是RexTester中几乎完全相同查询的一个示例
如果您得到一个错误,那么在这个代码之前可能有代码。这将导致错误。使用分号可以防止以后的代码出现问题
首先,递归子句应该显式列出列。不要使用select*和select,并期望两者匹配。因此,请列出以下列:
WITH TBL AS
(
SELECT * FROM OUTPUT WHERE PRODUCT_ID = 5
UNION ALL
SELECT O.PRODUCT_ID,O.PRODUCT_NAME,O.PARENT_ID,O.PARENT_PRODUCT_NAME
FROM OUTPUT O
JOIN TBL T1 ON O.PRODUCT_ID = T1.PARENT_ID
)
SELECT * FROM TBL
WHERE PRODUCT_ID <> 5
OPTION(MAXRECURSION 1000);
第二,您的名字中不应该有父产品名称。您有父ID。请使用该ID查找名称。CTE定义要求前面的语句结束才能正确编译。所以你的代码应该是
WITH TBL AS (
SELECT O.PRODUCT_ID, O.PRODUCT_NAME, O.PARENT_ID, O.PARENT_PRODUCT_NAME
FROM OUTPUT O
WHERE PRODUCT_ID = 5
UNION ALL
SELECT O.PRODUCT_ID, O.PRODUCT_NAME, O.PARENT_ID, O.PARENT_PRODUCT_NAME
FROM OUTPUT O JOIN
TBL T1
ON O.PRODUCT_ID = T1.PARENT_ID
)
CTE定义要求正确编译之前结束的语句。所以你的代码应该是
WITH TBL AS (
SELECT O.PRODUCT_ID, O.PRODUCT_NAME, O.PARENT_ID, O.PARENT_PRODUCT_NAME
FROM OUTPUT O
WHERE PRODUCT_ID = 5
UNION ALL
SELECT O.PRODUCT_ID, O.PRODUCT_NAME, O.PARENT_ID, O.PARENT_PRODUCT_NAME
FROM OUTPUT O JOIN
TBL T1
ON O.PRODUCT_ID = T1.PARENT_ID
)
从:
当CTE用于作为批处理一部分的语句时,它前面的语句必须后跟分号
添加分号;在你之前的陈述之后/在你与。最好总是在语句前面加上分号。来自:
当CTE用于作为批处理一部分的语句时,它前面的语句必须后跟分号
添加分号;在你之前的陈述之后/在你与。总是在语句前面加上分号可能是一种很好的做法