- PR -

本当に初歩的な質問で申し訳ありません。ストアドでの文字列連結

1
投稿者投稿内容
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2006-09-29 16:00
いつもお世話になります。本当に初歩的な質問で申し訳ありません。最近、仕事でSQLServerのストアドを作らないといけなくなり、次の様なストアドを作成しました。
テストテーブルからテスト列を取得し、取得したテスト列を文字列連結して@STRINGにセットするといういたって簡単なストアドになります。
しかし、なぜか@stringに@TestColの値が入ってくれないのです。
SQLServerの文字列連結は'+'であり、CASTして変換かけたりしてみたのですが、うまくいきません。また@testcolには正しい値が入っています。
本当に初歩的な質問で申し訳ないのですが、よろしくお願いいたします。

-----------------------------------------------
ALTER PROCEDURE GetTest
AS
BEGIN
DECLARE @string VARCHAR(8000) --SQL文
DECLARE @testcol VARCHAR(100) --SQL文


DECLARE cursor_test
CURSOR FOR SELECT テスト列 FROM テストテーブル
WHERE テストCD IN(1,2,3,4)

OPEN cursor_test
WHILE(1=1) --無限ループ
BEGIN
FETCH cursor_test INTO @testcol
if (@@fetch_status <> 0)
BEGIN
CLOSE cursor_test
DEALLOCATE cursor_test
BREAK
END
SET @string=@string+CAST(@testcol AS VARCHAR(100))
END


END
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-09-29 16:18
@stringの初期値は設定されていますか?
以下ヘルプからコピペ
引用:

NULL 値の文字列を操作した場合、連結の結果はセッションの設定によって決まります。NULL 値に対して実行される算術演算の場合、既知の値に NULL 値を追加すると、結果は通常、不明な値になります。同様に、NULL 値に対して実行される文字列連結演算でも、NULL の結果を生成する必要があります。ただし、現在のセッションの CONCAT_NULL_YIELDS_NULL の設定を変更することにより、この動作を変更できます。詳細については、「SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)」を参照してください。



_________________
音速の定時退社!
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-09-29 16:18
最近触って無いので、うろ覚えですが、

@stringに初期値が入っていないのでNULLになっていて、
SET @string=@string+CAST(@testcol AS VARCHAR(100)) が、
@string = NULL + '<ANY>' で NULLってことになっていませんか?
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2006-09-29 16:26
Yamさん、かつのりさん早速のレスありがとうございます。

最初の方に
SET @string=''
を入れることで解決しました。
お二人の説明を聞いていてなるほどと思いました。
文字列NULLに連結してもNULLなんですね・・・。
初歩的な質問に分かりやすく説明して頂きありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)