0
我編寫了一個CTE代碼,可以將分隔字符串(分隔符可以是任意)解析到表中。所以「MI,TX,WI
」將被解析成一個有3行的表格。SQL Server CTE錯誤:類型在錨點和遞歸部分之間不匹配
只要我不使用NVARCHAR(MAX)
作爲我想要解析的字符串輸入,它就會工作。
我想知道我怎樣才能得到它與NVARCHAR(MAX)
工作(或最起碼VARCHAR(MAX)
這個工程除了對此事發表評論,如果你改變你得到這個錯誤:
Types don't match between the anchor and the recursive part in column "b" of recursive query "cte".
--- change this to NVARCHAR(MAX) and it fails
DECLARE @DelimitedString NVARCHAR(4000)
DECLARE @Delimiter NVARCHAR(10)
SET @Delimiter = '--'
SET @DelimitedString= '123--456--7890, 234--456--7890'
-- do here instead of in every loop below
DECLARE @DelimiterLength AS TINYINT
SET @DelimiterLength = len(@Delimiter)
;with cte as
(
select 0 a, 1 b
union all
select b, charindex(@Delimiter, @DelimitedString, b) + len(@Delimiter)
from cte where b > a
)
select LTRIM(RTRIM(
SUBSTRING(@DelimitedString,
a,
case when b > @DelimiterLength then [email protected] else len(@DelimitedString) - a + 1 end
)--END SUBSTRING
))--end LTRIM/RTRIM
value
from cte where a > 0
我明白標準中的錯誤含義,UNION數據類型中的列必須匹配。我看不到如何解決問題。
我希望它能夠處理我們需要的字符串,因爲我不知道該用法是否會限制爲4000個字符的字符串。
嘗試鑄造B中的CTE的上半部分的'int'。 –
有一些比ctes更好的分割字符串的方法。以下是一篇專門介紹各種分離器的文章,以及它們如何提高性能。沒有必要在這裏重新發明輪子。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings –