Sql server 类型don';t锚定和列中递归部分之间的匹配“;“数据项”;“递归查询的定义”;“测试表”;

Sql server 类型don';t锚定和列中递归部分之间的匹配“;“数据项”;“递归查询的定义”;“测试表”;,sql-server,Sql Server,我执行以下声明: ;WITH testtable(strict,DataItem, description) AS ( SELECT strict, LEFT(description, CHARINDEX(CHAR(10), description + CHAR(10)) - 1), STUFF(description, 1, CHARINDEX(CHAR(10), description + CHA

我执行以下声明:

;WITH testtable(strict,DataItem, description) AS
    (
        SELECT
            strict,
            LEFT(description, CHARINDEX(CHAR(10), description + CHAR(10)) - 1),
            STUFF(description, 1, CHARINDEX(CHAR(10), description + CHAR(10)), '')
        from safezone where id = 12
        UNION all

    SELECT
        strict,
        LEFT(description, CHARINDEX(CHAR(10), description + CHAR(10)) - 1),
        STUFF(description, 1, CHARINDEX(CHAR(10), description + CHAR(10)), '')
    FROM testtable
    WHERE
        description > ''
        
)


SELECT
    strict,
    DataItem
into testno FROM testtable
ORDER BY strict
option (maxrecursion 0)
…以错误结束

递归查询“testtable”的列“DataItem”中的锚和递归部分之间的类型不匹配


我在哪里犯了错误?

CAST/将LEFT和STUFF部分转换为两个选项的适当数据类型,例如:`CAST(LEFT(description,CHARINDEX(CHAR(10),description+CHAR(10))-1)AS VARCHAR(x))错误告诉您问题所在,
UNION ALL中查询顶部和底部的数据类型不匹配。例如,
strict
barcode
可能是不同的数据类型。其中,
barcode
的值甚至来自哪里,它也没有在CTE
testtable
中定义。而且,当你解决了所有这些问题时,上述问题将永远无法完成;您有无限递归。老实说,这看起来您过度简化了SQL,实际上使其无效,因为这里有几个问题。仅供参考
是语句终止符。。。不是begin语句。我的错误是条形码,我编辑代码很严格。