• 締切済み

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

fantomの回答

  • fantom
  • ベストアンサー率31% (30/94)
回答No.1

困っていることについては、 よくわからないですが、、 SELECT結果を丸ごと格納するなら、 テーブル変数の型にしないと無理なような気がします。 やりたいことについてですが、 事前に新規テーブルの項目を下記のように定義して作成しておいて、 1.[ユーザ数001],....,[ユーザ数100],...,[アクセス回数001],...,[アクセス回数100] 2.下記SQL実行 INSERT INTO [新規テーブル] SELECT [ユーザ数001], . . . [ユーザ数100], [アクセス回数001], . . [アクセス回数100] FROM [元のテーブル] で対処できないでしょうか? 項目名をそれぞれ1~100まで入力しないといけないですが てっとりばやいと思います。

Ta-F
質問者

お礼

>fantomさん 返事が遅くなってしまい、大変申し訳ありませんでした。 今回はjamshid6さんのコードを参考にし、解決に至りました。 また次の機会がありましたら宜しくお願い致します。

Ta-F
質問者

補足

>fantomさん ご回答ありがとうございます。 ご指摘の通り、既に1のようにテーブルの項目は既に作成してあります。 そして、2の処理を行いたいのですが、項目数が多いので変数を使って 処理を短く記述できないものかと考えていた次第です。 変数を使ってできないとなると、fantomさんのおっしゃるとおり地道に 記述していくしかないでしょうね。

関連するQ&A

  • プロシージャで変数をテーブル名として使用したい

    いつもお世話になります。 以下のような感じで変数をテーブル名として参照したいのですが、できますでしょうか。 --ここから create proc proc_test @tbl_name varchar(30) as select count(*) from [dbo].[@tbl_name] --ここまで ver:SQL Server2000 宜しくお願いいたします。

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

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ストアド内でカラム名一覧を取得、カンマで繋げてひとつの変数にまとめたい。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 現在開発でストアドを使用する機会があり、そこで不明点が発生し悩んでおります。 以下、現状と質問です。 ■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文を流そうとしたのですが、  複数ある列名を取得して、上記で記載しましたように  カラム名をカンマで繋げてひとつの変数に格納する方法がわかりませんでした。  こういった場合、どのように考えて、どのように書けばよいのでしょうか。  まだ触り始めたばかりで、わからないことがわかっていない部分もあり、  質問内容でわかりにくい部分がありましたらご指摘いただければと思います。  どうぞよろしくお願いいたします。

  • 列名に変数を使うことはできないのでしょうか?

    SELECT TABLE.field AS @変数名 FROM・・・ とするとエラーになります。 列名に変数を使うことはできないのでしょうか?

  • PRO*Cでテーブル名にバインド変数は使えますか?

    PRO*Cのプログラムで、テーブル名とカラム名をパラメータで 受け取って、ホスト変数(バインド変数?)に代入して、 それぞれ、SELECT文等で使用できますか? PL/SQLなら出来るでしょうか? EXEC SQL BEGIN DECLARE SECTION; varchar t_name[64]; /* テーブル名 */ varchar col_name[64]; /* カラム名 */ EXEC SQL END DECLARE SECTION; /* 中略 パラメータの値をホスト変数に代入する処理を行う */ ↓以下のように出来ますか? SELECT :col_name FROM :t_name ;

  • クエリビルダで列名を変数にしたいが

    VisualStudio2010でwebアプリを作成しています。 クエリビルダでSQL文を作成しSQLサーバにアクセスしています。 このSQL文でわからない点があります。 列1、列2、列3のフィールドを持つテーブルがあるとします。 ドロップダウンリストで選択した項目により、ある時は列1だけ取得し ある時は列2だけ取得し、ある時は列3だけ取得する様なSQL文を作りたいのですが、どうすればよいかわかりません、列名を変数にできればよさそうなんですが、そんなことできますか? ある時は SELECT 列1 FROM table1 ある時は SELECT 列2 FROM table1 ある時は SELECT 列3 FROM table1 としたいので   SELECT @列名 FROM table @列名は変数のつもりです。 このようにできればよいと思っていますが・・・ よろしくおねがいします

  • TIMESTAMP型が含まれるテーブルの列名の取得

    Oracle 11gを使用しているSQL初心者です。 テーブルの列名を取得する方法についての質問です。 テーブルの列名を取得するときは以下のSQLで取れると思っています。 select column_name from user_tab_columns where table_name = 'テーブル名'; --実行結果-- COLUMN_NAME ------------------------------ NAME1 NAME2 しかし、テーブルにTIMESTAMP型が含まれていると 「レコードが選択されませんでした。」 と表示されます。 TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、 ご教示ください。よろしくお願い致します。

  • テーブルから項目が読めません

    既存のテーブルに項目を追加したのですが、 そのテーブルを「SELECT *」でよんでも 追加した項目がよめません。 ためしに、Accessにインポートし、同じSQL文を使うとちゃんと追加した項目もとってくるのですが...。 どうしてでしょうか? どなたか、教えてください!!!

  • テーブル名について

    へんな質問ですが、 テーブル名をuserにするとinsertでエラーがでます。 テーブル名をuser_bkupとかにすると、エラーが出なくなります。 こんなことってあるのでしょうか?

    • ベストアンサー
    • MySQL
  • スキーマー名が邪魔

    現在Access(DB用mdbと,そのmdbにリンクテーブルしているクライアント用mdb)で稼動しているDBをAccess+SQLServer2008 R2 EXPRESSという環境に移行しようとしています。 以下の質問を参考に http://okwave.jp/qa/q4935022.html?rel=innerHtml&p=bottom&l=1 SSMSを使ってAccessからのテーブルデータの移行を行いました。 そうしたところ スキーマ(?)として必ずdbo.テーブル名となってしまい、Accessからリンクテーブルするとdbo_テーブル名とデフォルト名がなってしまいました。 Accessのテーブルの名前の変更でリンクテーブルしたものからdbo_を取ることで解消すると言うことはわかっていますが、テーブルの数が100を超えるのでできればAccessからリンクをしに行った時点でdbo無しの状態にしたいと思っています。 SQLサーバーでテーブル名からdbo.と言うのをはずす方法はないのでしょうか? インポートの設定(マッピングのあたり)から無理やりはずしたりもしてみましたが勝手にdbo付属してしまいました。 よろしくお願いいたします。

  • ACCESS2000で変数の扱い方について

    ある変数を用いて、テーブルの項目名の参照の仕方が知りたいのですが 具体的には。。。 ACCESS2000でAとB二つのテーブルがあります。 Aには 項目No. (オートNo.) 項目名 (文字) Bには コード  (数値) 名称   (文字) カナ   (文字) 住所1  (文字) 住所2  (文字) という構成になっています。 Aの項目名には、Bの名称以下の列名(名称、カナ、住所1,2)という レコードが入っています。 ここで、Bの文字型の項目を全て64バイト以下にするという事をやりたいのですが、 今後もBの項目は増えていくことが予想されますので、 一つづつコードを書いていくのは大変なので、以下の方法を考えました。 1.Aの1レコード目の項目名を変数Xに代入 2.B上の列名Xを1レコード目から順番に64バイト以下に変換 3.Bのレコード全て終わった段階で、変数XにAの次レコードの項目名を代入 4.Aのレコードがなくなるまで、2へ戻る Do Until A.EOF   X=A.項目名     '変数XへAの項目名を代入     Do Until B.EOF       B.Edit       B!X= LeftB(B!X,64) 'Bの列名Xの文字数を64へ変換       ~~~~~~~~~~~~~~~~~~       B.Update       B.MoveNext     LOOP   A.MoveNext LOOP というコードを書いたのですが ~~~~部分の”B!X”だとテーブルBのXに入っている列名を認識しません。 どのように記述すればいいのか、教えてください。 また、以前から参照していたACCESSの質問掲示板HPが なくなってしまい、困っています。そのようなHPをご存知でしたら 教えていただきたいです。