• ベストアンサー
  • 困ってます

ストアド内でカラム名一覧を取得

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ストアド内でカラム名一覧を取得、カンマで繋げてひとつの変数にまとめたい。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 現在開発でストアドを使用する機会があり、そこで不明点が発生し悩んでおります。 以下、現状と質問です。 ■SQL SERVER 2000 ■テーブル(※)のカラム名一覧を取得し、  カラム名をカンマで繋げてひとつの変数に格納したいと思っています。  ※先の処理でカラムを取得したいテーブルをSELECTしており、  対象のテーブル名を変数に代入しています。  カラム一覧を取得するにあたり、以下のようにカーソルで習得し、  FETCHでカラム名を変数に格納しようと考えていましたが、  「'対象テーブル名'」には変数がいれられないので、どうしようかと悩んでいます。  DECLARE CURS_test CURSOR FOR   SELECT name FROM dbo.syscolumns   WHERE id IN   (SELECT id FROM dbo.sysobjects WHERE name = '対象テーブル名')   ORDER BY id, colid;  「sp_executesql」を使用してselect文を流そうとしたのですが、  複数ある列名を取得して、上記で記載しましたように  カラム名をカンマで繋げてひとつの変数に格納する方法がわかりませんでした。  こういった場合、どのように考えて、どのように書けばよいのでしょうか。  まだ触り始めたばかりで、わからないことがわかっていない部分もあり、  質問内容でわかりにくい部分がありましたらご指摘いただければと思います。  どうぞよろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • SQL Server
  • 回答数1
  • 閲覧数1168
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

>「'対象テーブル名'」には変数がいれられないので、どうしようかと悩んでいます。 declare @tblname varchar(100) set @tblname = '対象テーブル名' DECLARE CURS_test CURSOR FOR   SELECT name FROM dbo.syscolumns   WHERE id IN   (SELECT id FROM dbo.sysobjects WHERE name = @tblname)   ORDER BY id, colid; >カラム名をカンマで繋げてひとつの変数に格納する方法がわかりませんでした。 declare @colnm varchar(100) declare @colnmconcat varchar(100) set @colnmconcat = '' fetch next CURS_test into @colnm While @@fetch_status = 0 begin if @colnmconcat = '' begin set @colnmconcat = @colnm end else begin set @colnmconcat = @colnmconcat + ',' + @colnm end fetch next CURS_test into @colnm end こういった感じでどうでしょう?(未検証ですが。)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

> >「'対象テーブル名'」には変数がいれられないので、どうしようかと悩んでいます。 > declare @tblname varchar(100) > > set @tblname = '対象テーブル名' カーソルでは変数は使用できないと思い込んでいました。 無事完了いたしました。 ありがとうございました。

関連するQ&A

  • ユーザーが定義したストアドプロシージャ一覧の取得

    SQL Server 2005で、 db内のストアドプロシージャ一覧を取得したいと思っています。 select o.* from syscomments c , sysobjects o where c.id = o.id and o.type='P' order by o.name といったように記述すれば一覧は取得できるようですが、 これだとシステムストアドプロシージャも表示されてしまいます。 ユーザーで定義したストアドプロシージャのみ取得したいのですが、可能でしょうか? 何か良い手段をご存じの方がいらっしゃいましたらアドバイス頂けますと嬉しいです。 どうぞよろしくお願いいたします。

  • テーブルの項目名を変数にするには?

    <開発環境> WindowsXP Professional SQL Server 2005 いつもお世話になっております。 次のようなことをやりたいのですが、上手くできず困っています。 どなたかご教示くださると助かります。 ○やりたいこと  テーブルの項目数が1~200個あり、項目名が「ユーザ数001」「アクセス回数001」~ 「ユーザ数100」「アクセス回数100」の順に並んでいる。 そこで、変数を使って「ユーザ数001」~「ユーザ数100」と 「アクセス回数001」~「アクセス回数100」にSELECTして得られた 結果をINSERTしたい。 テーブルの列名(項目名)は以下のようにして取得することはできました。 SELECT dbo.syscolumns.name FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON (dbo.sysobjects.id = dbo.syscolumns.id) WHERE dbo.sysobjects.name = 'テーブル名' AND (dbo.syscolumns.name LIKE '%ユーザ数%' + @cnt OR dbo.syscolumns.name LIKE '%アクセス回数%' + @cnt) @cntは変数で1~100までカウントアップして列名を取得しています。 ○困っていること ・上記のSELECTで得られた結果を別の変数「@User」「@Access」にセットしたいが上手くできない。 ・さらに「@User」「@Access」を使って、INSERTを行いたい。 (具体的には以下のようにしたい) INSERT INTO dbo.[テーブル名](@User,@Access) SELECT TOP 100 UCNT, ACNT FROM ( SELECT・・・ (このINSERT文は前後にWHILE文で1~100まで処理を回して、変数「@cnt」がカウントアップするようにしています) 以上、下手な説明でわかりにくいかもしれませんが、宜しくお願い致します。

  • カラムの一覧を取得したい

    これまでMySQLを利用していたのですが、諸事情によりPostgreSQLへ 移行することになりました。そんなにMySQLへ依存した作り方をして いなかったので、簡単に考えていたのですが、ちょっと躓いている ことが出てきたのでご質問させて戴きます。 MySQLでは「show tables;」というコマンドを送ることにより、 データベース内のテーブル一覧を取得することが出来ました。 かなり色々調べ回ったところPostgreSQLでは 「select * from pg_stat_user_tables」 というコマンドが、それに相当することがわかりました。 同じように、MySQLでの「show fields from TABLE_NAME;」という 指定したテーブルのカラム一覧を取得するためのコマンドに相当する ものを探しているのですが見つかりません。 どなたかご存知であれば、ご教授下さい。 以上、宜しくお願い致します。

  • WHERE カラム名 <> ''の意味

    $result = $db->query("SELECT カラム名 FROM テーブル名 WHERE カラム名 <> ''"); PHPでSQL文を作成しているサンプルがあるのですが、「WHERE カラム名 <> ''」の意味が分かりません。カンマ二つで空文字? これはどういう意味でしょうか? また、<>は何と読むのでしょうか?(検索したいので)

    • ベストアンサー
    • MySQL
  • PDO/カラム値だけを取得したい(配列ではなく)

    PDOで、配列形式ではなく、変数だけを取得したいのですが、 どうすればいいでしょうか? ・取得結果の配列から値を取り出すのではなく、PDOでの取得段階で変数だけを取得したい ・結果は1件しかないという前提 <例> userテーブルで、指定条件(=email)に合致するnameカラム $sql = "SELECT name FROM user WHERE email = :email"; このとき、  Array ( [name] => 伊藤 ) ではなく、  伊藤 だけを取得したいです

    • ベストアンサー
    • PHP
  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。

  • 値が「1」のカラム名を求めたい。

    任意の列の、値が「1」のカラム名を求めるにはどうしたらいいでしょうか? PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 そもそものテーブルの作り方がおかしいのかも知れませんが、 以下のようになっています。 このテーブルで、IDが「40」の列の値が「1」のカラム名を求めたいのです。 どの様にしたらいいでしょうか? ※カラム名「会員番号110」は実際は整数になっています。 ID  会員番号110  会員番号111  会員番号112  会員番号113  40  1       1       0       1       41  0       1       1       1   $sql ="select * from `member_sub_tbl` where `ID`='$ID'"; $result = mysql_query($sql, $con); //カラムの数を取得する $numFields = mysql_num_fields($result); for($i=0;$i<$numFields;$i++){ $nameFields[] = mysql_field_name($result, $i); } print_r($nameFields); これで、カラム名は全て配列に入るのですが、値が「1」のと限定する方法がわかりません。 ご教授、よろしくお願いいたします。    

    • ベストアンサー
    • PHP
  • SQLServerで列名取得

    Microsoft SQL Server2014 ManagementStudio を Windows7 で使用しています。 テーブルのカラム(列)名を取得したくて いろいろ調べてみましたが SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'TestTable' ORDER BY ORDINAL_POSITION とか、 select name from Sys.Columns where object_id = object_id('TestTable') を実行しても、空のデータしか表示されません。 何がまちがっているのか教えてください。

  • SQLServerのストアドで戻り値取得したい。

    こんにちわ。 いまSQLServer2005でストアドを作成しています。 あるテーブルをSELECTして,あるカラムと件数の両方を出力パラメータに取得したいのですが, 件数は取得できるのですが,カラムが取得できません。 ちなみに下記のようなコードになります。 create procedure funLoginCheck (@UserID char(5), @PassWord varchar(10), @RowCount int output, @DeptID char(2) output) as select * from MST_Employee where EmployeeID = @UserID And PassWord = @PassWord; set @deptid = deptid」 deptidを出力パラメータに渡す方法がわかりません。 初歩的なことかもしれませんが, 教えてください。よろしくお願いします。

  • ストアドプロシージャについて

    いつもお世話になっております。 ストアドプロシージャで以下のようなことをしたいのですが、可能しょうか。 ある会員テーブルから1件のレコード(10個のカラムで構成されている)を取得します。その10個のカラム⇒10個のレコードとして別の一時的なテーブルに格納したいのですが可能でしょうか。 イメージとしては、 (1)Select Clm1,Clm2,Clm3~,Clm10 from MstMember 条件句 (2)(1)の結果をtmpTBLに格納。中身としては、、、 <tmpTBL> Clm1 Clm2 Clm3 Clm10 とここまで書きましたが、やりたいことはSelect文で取得したレコードのカラム1~10を順番に参照したいだけです。 素人質問で大変恐縮ですがご教示頂けますと幸いです。