- - PR -
Text型の文字列連結(SQL Server 2000)
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-07-28 14:51
SQL Server 2000 とVB.NETで開発を行っています。
ストアド内でText型の変数にVarChar型文字列を追加したいのですが 方法が分からなくて困っています。 SET Text型変数 = Text型変数 + VarChar型文字列 のようにしたいのですが エラー「データ型の演算子が無効です。データ型演算子は add、データ型は ntext です。」 が発生してしまいます。 上手く連結する方法を教えて頂けますでしょうか? | ||||
|
投稿日時: 2005-07-28 16:14
TEXT型を+演算子に渡せないと思います。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ca-co_2f3o.asp #「image 型、ntext 型、および text 型は除きます」と書かれていますしね。 TEXT型変数に入るサイズはどれぐらいでしょうか? 単純な考えで行くと 1)TEXT型変数をVARCHAR型へ変換 2)変換したものとVARCHAR型を+演算子で結合 3)結合した結果をTEXT型へ変換 っていうパターンがあるのですが、TEXT型⇒VARCHAR型にはサイズ制限があるので 注意が必要になります。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ca-co_2f3o.asp #このページの真ん中ぐらいに #「データ型の自動変換は、text 型および image 型ではサポートしていません。 #text 型データから文字型データへの変換、および image 型データから binary 型 #または varbinary 型への変換は、明示的に行うことができますが、最大の長さは 8000 です。」 #という記述がありますし。 | ||||
|
投稿日時: 2005-07-28 16:25
夏椰さん、ありがとうございます。
説明不足で申し訳ありません。 TEXT型変数に入るサイズは8000バイトを超える文字列です。 初めはVarChar型の変数に文字列を追加していたのですが 8000バイトを超えることが分かった為、Text型に変更しました。 Text型への文字列の追加はどのようにすれば宜しいでしょうか? | ||||
|
投稿日時: 2005-07-28 16:54
最終的にTEXT型変数の内容をUpdateするという目的であればの話ですが、 TEXT型変数の文字列追加ではなく、 直接のUpdateはどうですか? http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ua-uz_6i2c.asp でOFFSETを最後にして文字の追加って形をとってみては? と思ったのですが。 どうでしょう? | ||||
|
投稿日時: 2005-07-28 17:24
早急なご回答ありがとうございます。
TEXT型変数は出力パラメータなので TEXT型変数の内容を変更したいです。 下記のようにUpdateを使用してみましたが エラー「 '@PO_Moji' の近くに無効な構文があります。」が発生しました。 UpdateはテーブルのText型の列を更新するものなんですね。 勉強になります。 TEXT型変数の内容を変更するのは不可能なのでしょうか? ----------------------------------------- CREATE PROCEDURE Proc_test ( @PO_Moji TEXT = '' OUTPUT ) AS DECLARE @Moji VARCHAR(200) DECLARE @Ptrval BINARY(16) SET @Moji = 'あいうえお' SELECT @Ptrval = TEXTPTR(@PO_Moji) UPDATETEXT @PO_Moji @Ptrval null 0 @Moji RETURN 0 GO ----------------------------------------- [ メッセージ編集済み 編集者: OASIS 編集日時 2005-07-28 17:33 ] | ||||
|
投稿日時: 2005-07-29 00:39
お疲れ様です。 text 型の OUTPUT パラメータでなければならない制限はありますでしょうか? ストアドプロシージャ内でも text(ntext)型には非常に制限が多くて難しいと思います。 UPDATETEXT もテーブル内のカラムしか指定できませんので,パラメータの加工はできないと思います。 そこで, 一時テーブル内でテキストを加工して,その結果セットを返す方式では要件は満たせないでしょうか? [code]----- CREATE PROCEDURE [TextTest] AS --一時テーブル作成 CREATE TABLE #TempText ( tempField text ) --組み立て用のダミー行を追加 INSERT [#TempText](tempField) VALUES('') --テキストを組み立て DECLARE @insertText VARCHAR(8000) DECLARE @pointer BINARY(16) SET @insertText = SPACE(7999) + 'a' SELECT @pointer = TEXTPTR(tempField) FROM #TempText UPDATETEXT #TempText.tempField @pointer null 0 @insertText UPDATETEXT #TempText.tempField @pointer null 0 @insertText SELECT tempField FROM #TempText RETURN 0 GO [code]---- このストアドプロシージャを .NET からコールすると, 長さ16,000の文字列を返すことができます。 テキストの組み立て部分を変更して適用してください。 ---------- TimberLandChapel http://blogs.timberlandchapel.com | ||||
|
投稿日時: 2005-07-29 16:09
TLCさん、ありがとうございます。
VB.NETでストアドを呼び出し、その結果セットから目的の文字列を取得できました。 ご教授頂きありがとうございました。 | ||||
1
