반응형
CTE 오류 : "앵커와 재귀 부분간에 유형이 일치하지 않습니다."
다음 진술을 실행하고 있습니다.
;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
... 오류와 함께 완료됩니다 ...
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".
내가 실수하는 곳은 어디입니까?
정확히 말한 내용 :
'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
기본적으로 길이도 일치하는지 확인해야합니다. 재귀 비트의 CAST('name' AS varchar(4))
경우 다시 실패하면 사용해야 할 수 있습니다.
두 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
나에게 문제는 다른 데이터 정렬에있었습니다.
이것은 나에게 도움이되었습니다.
;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;
다른 사람을 도울 수 있기를 바랍니다.
;with cte as
(
select 1 as rn, 'name' + CAST(1 as varchar(255)) as nm
union all
select rn+1,nm = 'name' + CAST((rn+1) as varchar(255))
from cte a where rn<10)
select * from cte
제 경우에는의 상단 및 하단 절에서 열 시퀀스를 엉망으로 만들었습니다 UNION ALL
. 그리고 varchar
기둥이 int
하나의 '아래'에 나타났습니다 . 많은 열이 있다는 쉬운 실수
nvarchar (max) 사용을 권장합니다.
WITH CTE AS (
SELECT x,x_name FROM (VALUES (1,CAST('' AS nvarchar(MAX)))) AS test(x,x_name)
UNION ALL
SELECT x + 1 x, CONCAT(x_name,x+1) FROM CTE WHERE x < 10 )
SELECT * FROM CTE
;with tmp1(NewsId,DataItem ,HeaderText)
as
(
select NewsId, LEFT(HeaderText, CHARINDEX(',',HeaderText+',')-1),
STUFF(HeaderText, 1, CHARINDEX(',',HeaderText+','), '')
from Currentnews
union all
select NewsId, LEFT(HeaderText, CHARINDEX(',',HeaderText+',')-1),
STUFF(HeaderText, 1, CHARINDEX(',',HeaderText+','), '')
from tmp1
where HeaderText > ''
)
select NewsId, DataItem
from tmp1
order by NewsId
ReferenceURL : https://stackoverflow.com/questions/1838276/cte-error-types-dont-match-between-the-anchor-and-the-recursive-part
반응형
'Programing' 카테고리의 다른 글
Control.BeginInvoke에 대한 MethodInvoker 대 작업 (0) | 2020.12.29 |
---|---|
ListView 항목이 콘텐츠를 래핑하기 위해 커지지 않는 이유는 무엇입니까? (0) | 2020.12.29 |
스위치 블록 내에서 foreach 루프에서 벗어나기 (0) | 2020.12.29 |
HTTPS URL을 생성하도록 Paperclip을 구성 할 수 있습니까? (0) | 2020.12.29 |
Google Maps JavaScript API v3를 사용하여 Google지도에서 보이는 영역의 중심 좌표를 얻는 방법 (0) | 2020.12.29 |