MSDE FunClub
Microsoft Data Engine FunClub
MSDE技術者向けメーリングリスト過去ログ[1226]番
 
[TOP]>[MSDE技術者向けメーリングリスト過去ログ(1226番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
RE:  nText の利用方法について

Date: Sat, 8 Nov 2003 16:33:43 +0900
From: "Akira Horikawa" <who@example.ne.jp>


堀川です、こんにちは

-----Original Message-----
From: ko miguchi [mailto:who@sub.example.jp] 
Sent: Wednesday, November 05, 2003 11:56 PM
To: who@example.ne.jp
Subject: [ml-msde:01224] nText の利用方法について



テキスト型列を設計するときに、行内テキスト文字列を許可するかどうかを
テーブルオプションで選択することができます。
(sp_tableoption ストアドプロシージャ参照)

行内テキストを許可すると、プログラムが面倒になるので、ここでは行内
テキストを使わない例にします。


データベースは、Sampleとする
  Use Sample
GO

  CREATE TABLE TBL(
    ID  INT PRIMARY KEY , 
    TXT TEXT
  )
GO

--行内BLOBは使わない
  EXEC sp_tableoption  'TBL' , 'text in row', 'off'
GO



ストアドプロシージャを登録します。
 CREATE PROCEDURE READ_TXT
      @P     VARBINARY(16) ,
      @SKIP  INT ,
      @LENG  INT
AS
    SET NOCOUNT ON
    READTEXT  TBL.TXT @P @SKIP @LENG

このストアドプロシージャは、テキスト型列の部分文字列の読み出しに使います。


  Use Sample
GO

  SET NOCOUNT ON
  DECLARE @STR VARCHAR(8000)
  INSERT INTO TBL( ID ,TXT ) VALUES( 1 , 'AAAAA' )

--小さな文字列長であれば取得可能
  SELECT @STR=TXT FROM TBL WHERE ID=1
  PRINT @STR
GO

  DECLARE @LN INT
  DECLARE @pTXT   VARBINARY(16)

  DECLARE @TXT_1  VARCHAR(8000)
  DECLARE @TXT_2  VARCHAR(8000)
  DECLARE @TXT_3  VARCHAR(8000)

  SELECT @TXT_1 = REPLICATE('A',8000)
  SELECT @TXT_2 = REPLICATE('B',8000)
  SELECT @TXT_3 = REPLICATE('C',8000)


  INSERT INTO TBL( ID )  VALUES( 2 )


  SELECT @pTXT = TEXTPTR(TXT) FROM TBL WHERE( ID = 2 )
  IF( TEXTVALID('TBL.TXT', @pTXT) = 0 )
    BEGIN
        --無効なテキストポインタになっている
        --UPDATE命令を実行し、初期化しなければいけない(適当な値を入れておく)
        PRINT 'テキストポインタが無効な状態です'
        UPDATE TBL SET TXT='dummy' WHERE ID = 2
    END


--テキストデータを挿入する 
  SELECT @pTXT = TEXTPTR(TXT) FROM TBL WHERE( ID = 2 )
  WRITETEXT  TBL.TXT @pTXT  @TXT_1
  UPDATETEXT TBL.TXT @pTXT  NULL 0  @TXT_2
  UPDATETEXT TBL.TXT @pTXT  NULL 0  @TXT_3
  SELECT @LN=DATALENGTH(TXT) FROM TBL WHERE ID = 2
  PRINT 'テキストの文字列長は=' + CAST(@LN AS VARCHAR)


--テキストデータの読み出し
  DECLARE @TXT_11  VARCHAR(8000)
  DECLARE @TXT_22  VARCHAR(8000)
  DECLARE @TXT_33  VARCHAR(8000)

  SET TEXTSIZE 8000
  READTEXT  TBL.TXT @pTXT     0 8000
  READTEXT  TBL.TXT @pTXT  8000 8000
  READTEXT  TBL.TXT @pTXT 16000 8000


  --ストアドプロシージャでテキストの部分文字列の表示を行う
  EXEC READ_TXT @pTXT ,     0 , 8000
  EXEC READ_TXT @pTXT ,  8000 , 8000
  EXEC READ_TXT @pTXT , 16000 , 8000

  --ローカル一時テーブルに格納する
  CREATE TABLE #TMP( PART INT IDENTITY(1,1) , STR VARCHAR(8000) )
  INSERT INTO  #TMP EXEC READ_TXT @pTXT ,     0 , 8000
  INSERT INTO  #TMP EXEC READ_TXT @pTXT ,  8000 , 8000
  INSERT INTO  #TMP EXEC READ_TXT @pTXT , 16000 , 8000
  SELECT * FROM #TMP

  SELECT @TXT_11=STR FROM #TMP WHERE PART=1
  SELECT @TXT_22=STR FROM #TMP WHERE PART=2
  SELECT @TXT_33=STR FROM #TMP WHERE PART=3

  IF( @TXT_11=@TXT_1 ) PRINT '1:一致しました。OK'
  IF( @TXT_22=@TXT_2 ) PRINT '2:一致しました。OK'
  IF( @TXT_33=@TXT_3 ) PRINT '3:一致しました。OK'


  DROP TABLE #TMP
  DELETE FROM TBL
GO



TEXT型列の処理は面倒なので、T-SQLで処理するのを止めて、ADOなどの
オブジェクトを通じて、クライアント側で処理すれば、より簡単になります。


------------------------------------
(株)日本技術ソフト開発
        堀川 明  (Akira Horikawa)
    11月08日(土曜日) 15時46分記
        mailto:who@example.ne.jp
        http://www.horikawa.ne.jp/msde/



[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。