• 締切済み

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

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

みんなの回答

  • freemank
  • ベストアンサー率75% (3/4)
回答No.1

うるおぼえですが、動的SQLを利用すれば良いと思います。 S_SQL varchar(256); BEGIN -- 実行するSQL文 S_SQL := 'SELECT count(*) from ' || @tbl_name; -- SQL実行と結果取得 EXECUTE IMMEDIATE S_SQL 記述に自信がないので、『動的SQL』で しらべてください!笑

ken__t
質問者

お礼

ご連絡が遅れまして大変失礼いたしました。 freemankさんの回答の文法はOracleかと思います。 exec ('select * from ' + @tbl_name) で解決いたしました。有難う御座いました。

関連するQ&A

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

    <開発環境> 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」がカウントアップするようにしています) 以上、下手な説明でわかりにくいかもしれませんが、宜しくお願い致します。

  • 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 ;

  • 2つのテーブルのカウント結果を1行で取得

    以下のようなデータ件数のテーブルが、別々のDBにあります。 SELECT COUNT(*) FROM AA.TBL01 ------ TBL01 ------ 10 SELECT COUNT(*) FROM BB.TBL02 ------ TBL02 ------ 5 それぞれのテーブルのカウント結果を、1行で取得する ことは可能でしょうか? <取得したい結果> ---------------- TBL01 TBL02 ---------------- 10 5 よろしくお願いします。 (SQL Server2005 Standard)

  • 別テーブルのカラムを利用してソートしたい

    別テーブルのカラムを利用してソートしたい MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」のcountというカラムを利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 「tbl2」のidというカラムは外部キーで「tbl1」のidと関係しています。 テーブル「tbl1」 +------+---------+ |   id |  userid  | +------+---------+ |  1  | tanaka  | |  2  | sato   | +------+---------+ テーブル「tbl2」 +------+---------+ |   id |  count  | +------+---------+ |  1  |   10  | |  2  |   3   | +------+---------+ 次のような文かなと思ったのですが、エラーが返ってきます・・・ SELECT * FROM tbl1 ORDER BY (SELECT id FROM tbl2 ORDER BY count)

    • ベストアンサー
    • MySQL
  • PL/SQLのCREATE文でCHAR型で項目ができない

    PL/SQLで以下のようにCREATE文を発行しました。 Bテーブルの項目 項目1,'1'を持つテーブルを作成したいのです。 DECLARE  KBN CHAR(1);  WK_SQL VARCHAR2(4000); BEGIN  KBN := '1';  WK_SQL := 'CREATE TABLE A_TBL AS    SELECT B.項目1 , ' || KBN || ' AS A項目    FROM B_TBL B ' ;  EXECUTE IMMEDIATE WK_SQL; END; 結果はA_TBLの項目、A項目がどうしてもNUMBER型になるのです。初心者で、質問に不備なところもあるかもしれませんが、どうすればよいか、ご教授ください。

  • phpでテーブルを作る際変数によってテーブル名を変えたいです。

    phpでテーブルを作る際変数によってテーブル名を変えたいです。 文字列$nama(tarou,jirou等)、 整数$iの中身によって作るテーブル名が tbl_tarou_1、tbl_tarou_2、tbl_jirou_5と変わるプログラムを作りたいのです。 当方初心者なので以下のプログラムを改変するような形でお答えいただけないでしょうか。 回答よろしくお願いいたします。 $db = sqlite_open("db"); $query = "CREATE TABLE tb(xyz VARCHAR(20))"; $result = sqlite_query($db,$query_statics); sqlite_close($db);

    • ベストアンサー
    • PHP
  • テーブルの行を増やしたい・・・。

    テーブルの行を増やし、 データを一年文作成したいのですが・・・。 CREATE TABLE CALENDAR_TBL( YYYYMMDD DATE NOT NULL, DayData NUMBER(3) NULL CONSTRAINT CALENDAR_TBL_PKEY PRIMARY KEY(YYYYMMDD)); このテーブルに、2005年のデータ365レコードを挿入したいのですが、 1つのINSERT文(SQL)で、できますでしょうか? (※PL/SQLは除きます。) ※不可能であれば、SELECT文(下記のように)を一年分用意してUNIONで作成するのですが、 これ以外に簡単にできないでしょうか? INSERT INTO CALENDAR_TBL ( (SELECT SYSDATE + 000, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 001, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 002, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 003, DayData FROM CALENDAR_TBL) ・・・(省略)・・・ UNION (SELECT SYSDATE + 365, DayData FROM CALENDAR_TBL) )

  • ストアドプロシージャ作成時のエラーについて

    お世話になっております。 CREATE PROCEDURE AAA (IN param INT) BEGIN SELECT CD, NAME FROM TBL WHERE TBL_KEY = param; END INTEGER型の引数を渡してVARCHAR型のCD、NAMEを取り出す程度のストアドプロシージャを作成しようとすると 1303 - Can't create a PROCEDURE from within another stored routine. なるエラーが表示されて作成ができません。 このエラーの理由についてコメント頂ければ幸いです。

    • ベストアンサー
    • MySQL
  • 変数の取り扱いについて

    はじめまして。思いっきりSQLSERVERは初心者なんですが宜しくお願いします。 現在SQLSERVER2005です。 ややこしくなるので要点だけ以下まとめています。 変数を利用してレコードを抽出する時なんですが… ALTER PROCEDURE Test @Rank INT BEGIN DECLARE @SELECT AS VARCHAR(100) DECLARE @WHERE AS VARCHAR(100) DECLARE @SQL AS VARCHAR(200) SET @SELECT = 'SELECT * FROM tblA ' SET @WHERE = 'WHERE Rank > ' + @Rank SET @SQL = @SELECT + @WHERE EXEC(@SQL) END 実行すると varchar の値 'WHERE Rank > 'をデータ型 int に変換できませんでした。 となります。 Rank部分が数値なんですが、どのように取扱いすべきなんでしょうか。

  • PL/SQLでテーブル名に変数を使いたい

    下記のようにV_TABLE_NAMEに不定のテーブル名で使用したい ご存知の方は教えて頂けないでしょうか?V_TABLE_NAMEに取得したテーブルをセットし、データの件数を取得するPL/SQL CURSOR C_CUR IS SELECT COUNT (*) FROM V_TABLE_NAME; BEGIN for ・・・・・ loop ・・・  ・・・ V_TABLE_NAME := GET_TABLE;  OPEN C_CUR;  FETCH C_CUR into w_count; CLOSE C_CUR; end loop;