pri*_*kar 56 sql t-sql sql-server common-table-expression
我正在执行以下声明:
;WITH cte AS (
SELECT
1 as rn,
'name1' as nm
UNION ALL
SELECT
rn + 1,
nm = 'name' + CAST((rn + 1) as varchar(255))
FROM cte a WHERE rn < 10)
SELECT *
FROM cte
Run Code Online (Sandbox Code Playgroud)
...完成错误...
Msg 240, Level 16, State 1, Line 2
Types don't match between the anchor and the recursive part in column "nm" of recursive query "cte".
Run Code Online (Sandbox Code Playgroud)
我在哪里弄错了?
gbn*_*gbn 93
它究竟是什么意思:
'name1'
有不同的数据类型 'name' + CAST((rn+1) as varchar(255))
试试这个(未经测试)
;with cte as
(
select 1 as rn, CAST('name1' as varchar(259)) as nm
union all
select rn+1,nm = 'name' + CAST((rn+1) as varchar(255))
from cte a where rn<10)
select * from cte
Run Code Online (Sandbox Code Playgroud)
基本上,你必须确保长度匹配.对于递归位,CAST('name' AS varchar(4))
如果再次失败,则可能必须使用
Adr*_*der 22
您需要投射两个nm字段
;with cte as
(
select 1 as rn,
CAST('name1' AS VARCHAR(255)) as nm
union all
select rn+1,
nm = CAST('name' + CAST((rn+1) as varchar(255)) AS VARCHAR(255))
from cte a where rn<10)
select * from cte
Run Code Online (Sandbox Code Playgroud)
对我来说,问题出在不同的排序规则中。
只有这帮助了我:
;WITH cte AS (
SELECT
1 AS rn,
CAST('name1' AS NVARCHAR(4000)) COLLATE DATABASE_DEFAULT AS nm
UNION ALL
SELECT
rn + 1,
nm = CAST('name' + CAST((rn + 1) AS NVARCHAR(255)) AS NVARCHAR(4000)) COLLATE DATABASE_DEFAULT
FROM cte a WHERE rn < 10)
SELECT *
FROM cte;
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助别人。
归档时间: |
|
查看次数: |
63704 次 |
最近记录: |