none
dtsパッケージに関すること RRS feed

  • 質問

  • SQLサーバー2000のdtsパッケージのSQl実行タスクで、SQLステートメントを

     

    SELECT コード FROM table WHERE (name='                                                  ')

    という具合に’’の間に空白を50個設定します。

     

    設定した時にうまく動作しません。

    なにかよい方法はございますか?

    症状としましては

    クエリを作成してOKを押すと変なところで勝手に改行が入っていきます。

     

    2008年7月19日 5:59

回答

  • > SELECT コード FROM table WHERE (name='                                                  ')

    > という具合に’’の間に空白を50個設定します。

     

    SQL Serverでは文字列の後ろの空白は無視して抽出されるはずです。

    (「はず」と書いたのは、それについて書かれた公式の文書が見つからないためです)

    そのため、「SELECT コード FROM table WHERE (name='')」と記述しても、結果は同じになります。

     

    試しに以下のテーブルを作成して、

    CREATE TABLE [table]

    (

        コード    int,

        name    varchar(50)

    )

     

    次の行を追加しました。(コードに設定した値が空白の数です)

    INSERT INTO [table] VALUES (0, '')

    INSERT INTO [table] VALUES (1, ' ')

    INSERT INTO [table] VALUES (5, '     ')

    INSERT INTO [table] VALUES (50, '                                                  ')

     

    次に、SELECTクエリーを発行して、結果を比べてみました。

    SELECT コード FROM [table] WHERE (name='                                                  ')

    SELECT コード FROM [table] WHERE (name='')

     

    その結果、両方とも同じ結果となりましたので、項目が空白かどうかを調べるだけであれば、

    空白を50個設定する意味はありません。逆に、空白が50個設定されている行だけを抽出するというのであれば、

    別の抽出条件を指定する必要があります。

     

     

    > 症状としましては

    > クエリを作成してOKを押すと変なところで勝手に改行が入っていきます。

     

    こちらに関しては、DTSパッケージのクエリデザイナでクエリを作成した場合に現象が発生するようなので、

    クエリデザイナを使わないで直接入力するか、生成されたクエリから改行を削除すれば解決すると思われます。

    2008年7月19日 13:40
  • こんにちは、naginoです。

     

    CatTailさんの投稿を見て、状況を理解しました。

    「データ変換サービス クエリ デザイナ」を使用されているということですね。

    CatTailさんが記載しているととおり、「データ変換サービス クエリ デザイナ」を使わずに「SQL 実行タスクのプロパティ」で

    直接クエリを入力することで、回避できます。

     

    なお、蛇足ながら、文字列の末尾の空白の扱いについては、比較演算子の仕様になります。

    SQL Server 2005であれば以下に記載があります。

    http://msdn.microsoft.com/ja-jp/library/ms191529.aspx

    SQL Server 2000とSQL Server 7.0については、以下に記載があります。

    http://support.microsoft.com/kb/316626/en-us

    2008年7月19日 15:39

すべての返信

  • > SELECT コード FROM table WHERE (name='                                                  ')

    > という具合に’’の間に空白を50個設定します。

     

    SQL Serverでは文字列の後ろの空白は無視して抽出されるはずです。

    (「はず」と書いたのは、それについて書かれた公式の文書が見つからないためです)

    そのため、「SELECT コード FROM table WHERE (name='')」と記述しても、結果は同じになります。

     

    試しに以下のテーブルを作成して、

    CREATE TABLE [table]

    (

        コード    int,

        name    varchar(50)

    )

     

    次の行を追加しました。(コードに設定した値が空白の数です)

    INSERT INTO [table] VALUES (0, '')

    INSERT INTO [table] VALUES (1, ' ')

    INSERT INTO [table] VALUES (5, '     ')

    INSERT INTO [table] VALUES (50, '                                                  ')

     

    次に、SELECTクエリーを発行して、結果を比べてみました。

    SELECT コード FROM [table] WHERE (name='                                                  ')

    SELECT コード FROM [table] WHERE (name='')

     

    その結果、両方とも同じ結果となりましたので、項目が空白かどうかを調べるだけであれば、

    空白を50個設定する意味はありません。逆に、空白が50個設定されている行だけを抽出するというのであれば、

    別の抽出条件を指定する必要があります。

     

     

    > 症状としましては

    > クエリを作成してOKを押すと変なところで勝手に改行が入っていきます。

     

    こちらに関しては、DTSパッケージのクエリデザイナでクエリを作成した場合に現象が発生するようなので、

    クエリデザイナを使わないで直接入力するか、生成されたクエリから改行を削除すれば解決すると思われます。

    2008年7月19日 13:40
  • こんにちは、naginoです。

     

    CatTailさんの投稿を見て、状況を理解しました。

    「データ変換サービス クエリ デザイナ」を使用されているということですね。

    CatTailさんが記載しているととおり、「データ変換サービス クエリ デザイナ」を使わずに「SQL 実行タスクのプロパティ」で

    直接クエリを入力することで、回避できます。

     

    なお、蛇足ながら、文字列の末尾の空白の扱いについては、比較演算子の仕様になります。

    SQL Server 2005であれば以下に記載があります。

    http://msdn.microsoft.com/ja-jp/library/ms191529.aspx

    SQL Server 2000とSQL Server 7.0については、以下に記載があります。

    http://support.microsoft.com/kb/316626/en-us

    2008年7月19日 15:39
  • ご返信ありがとうございます。

    一度ためしてみます。

    2008年7月24日 23:59
  • こんにちは。フォーラムオペレータ 大久保です。

     

    はまぐりらっこ さん、その後いかがでしょうか?お二方からいただいた情報でお試しになりましたでしょうか?

    もし思い通りの動作結果が得られましたらその旨お知らせいただけると、このスレッドがより有益なものになりますので、お暇でしたらぜひお願いします。

     

    ひとまず、アドバイスをくださったお二人の投稿に「回答済み」チェックをつけさせていただきました。

    また何かありましたら、このフォーラムのことを思い出してください

     

    それではー

    2008年7月31日 9:57