2011-08-01 13 views
0

nvarchar(最大) として取得した連結文字列がありますが、9998文字のみを取得しています。大きな連結文字列を割り当ててSQL Server 2008で分割する方法

連結文字列に含まれるすべての文字を取得したいとします。

どのようにすべての文字を取得できますか?

ALTER function [utils].[udf_SplitString] 

(
@iSearchText NVARCHAR(MAX) 
,@iSearchExpr VARCHAR(10) 
) 
Returns @Results Table(id integer identity,SearchText NVARCHAR(MAX),ElementValue VARCHAR(max)) 
As 
BEGIN 

Insert into @Results 
(SearchText,ElementValue) 
------- Split........ 
SELECT SearchText, 
NullIf(SubString(SearchExpr + SearchText + SearchExpr , PositionedAt , CharIndex(SearchExpr , SearchExpr + SearchText + SearchExpr , PositionedAt) - PositionedAt) , '') AS SearchText 
FROM (select numberid PositionedAt from utils.numbers) Occurences, 
(
select 
@iSearchText as SearchText, 
@iSearchExpr as SearchExpr 
) dual 
WHERE PositionedAt <= Len(SearchExpr + SearchText + SearchExpr) AND SubString(SearchExpr + SearchText + SearchExpr , PositionedAt - 1, 1) = SearchExpr 
AND CharIndex(SearchExpr , SearchExpr + SearchText + SearchExpr , PositionedAt) - PositionedAt > 0 
------------ End of Split 
Return 

End 
+0

私は前の質問で述べたように、**完全な**コードを表示するので、中間のデータ型を見ることができます。あなたは答えが欲しいのですか?私たちがあなたを助けるために必要なものを与えてください。 – gbn

+0

ここでは、データ型にnvarchar(max)を指定していますが、入力に9998文字以上含まれています。私は上記のコードを使用する場合私は9998文字だけを取得することができます。入力文字列内のすべての文字を取得したい場合、どうすればよいですか? –

+0

私は "フルコード"と言った。あなたは入力が9998バイトであることを私たちに見せていません:それは正しいかもしれません(それは8000を超えているので)。しかしスプリット値の追加から9998しか得られません。今、「分割」コードなしで私たちはあなたを助けることができません**あなたは理解していますか? – gbn

答えて

1

あなたのスプリット機能は、あなたのutils.numbers使用して、 "番号" テーブルの技術をベースに?

これは何を意味しますか?

SELECT COUNT(*), MAX(numberid) utils.numbers 

それはNVARCHAR(MAX)であるので、あなたが潜在的に10億、完全な文字列の長さに対処するための十分な数字を持っていますか?

トランケーションの原因となっている行が10000個しかないと思われます。 9998は最後の,の位置から来て、数字がなくなる前に

+0

はい、10000行しか取得できません。今私は何を変えなければならないのですか? –

1
CREATE Function [dbo].[ParseStringList] (@StringArray nvarchar(max)) 
Returns @tbl_string Table (ParsedString nvarchar(max)) As 

BEGIN 

DECLARE @end Int, 
     @start Int 

SET @stringArray = @StringArray + ',' 
SET @start=1 
SET @end=1 

WHILE @end<Len(@StringArray) 
    BEGIN 
     SET @end = CharIndex(',', @StringArray, @end) 
     INSERT INTO @tbl_string 
      SELECT 
       Substring(@StringArray, @start, @[email protected]) 

     SET @[email protected]+1 
     SET @end = @end+1 
    END 

RETURN 
END 

はこのようにそれを使用します。

Select ParsedString From dbo.ParseStringList(@StringArray) 
+0

は9998文字だけを取得します。ストアドプロシージャでこの関数を使用すると、9998文字以上の文字が入力されている文字をすべて取得できない可能性があります。 –

+0

nvarchar(最大)は4000文字になります。 varchar(max)に変更すると、最大8000文字まで取得できます。それより大きいものが必要な場合は、あなたが調べることができるBLOB型があります。 – Chains

+0

どのようにBLOBタイプを割り当てることができますか? –

関連する問題