0

ntextというタイプの列があり、次Emp_details_listのようなデータで構成されています

 emp1#@#emp2#@#emp3...

せいぜい2万文字の文字列で、その列に保存していて、それを分割して他のテーブルEmpDetと他の列に保存する必要があります( )が、ローカル変数を使用して宣言しているため、Single_Emp_det分割中にキャストできませんas および分割ですが、8001文字が格納できないため例外を表示している場合にのみ8000文字しか格納できません。SQL Serverで分割の概念を使用して他の列にデータ全体を格納するにはどうすればよいですかntextnvarcharnvarchar(max)ntext

4

2 に答える 2

0

そのため、おそらく Sql サーバー 2000 に固執しています。nvarchar(max) を使用できない場合、可能な方法の 1 つは、部分文字列関数を使用して ntext をループ内の varchar(8000) の管理可能なチャンクにコピーすることです。各反復で、「最後の # の後のチャンクの部分」を保存して、次の反復で使用します。したがって、基本的にテーブルをループし、そのループ内で ntext フィールド値を 8k のチャンクで再度ループし、残りを実行します。それが十分に明確であることを願っています。

于 2013-03-31T02:23:45.927 に答える
0

他の人がすでに述べたように、nvarchar(max) には 20000 文字を簡単に格納できます。これらの型を変換するときに、おそらく何か間違ったことをしています。

nvarchar(max) との間の変換の例を次に示します。これは、そこに 20000 文字を格納する方法を明確に示しています。

DECLARE @v1 nvarchar(max)

DECLARE @v2 nvarchar(max)



create table #textExample

(

    id int,

    t1 ntext

)



declare @count int

set @v1 = ''

SET @count = 0

while @count < 20000

begin  

   set @v1 = @v1 + '1'

   set @count = @count + 1

end

--converting nvarchar(max) to ntext

insert into #textExample

values (1, CONVERT(ntext,@v1))



select * from #textExample

-- converting ntext back to nvarchar(max)

SET @v2 = CONVERT(nvarchar(max), (select t1 from #textExample where id = 1))

select @v2, LEN(@v2)





drop table #textExample
于 2013-04-01T08:54:47.833 に答える