
SQL超初心者です。
ストアド内でテーブル名を可変にしたいのですが以下のようなエラーメッセージが表示され
でません。どなたか教えていただけませんか?
<エラーメッセージ>
テーブル変数 "@AA" を宣言してください。
◆環境
sql Sever 2005
◆コードは以下の通りです。
DECLARE @AA VARCHAR(50)
DECLARE @HANTEI CHAR(5)
DECLARE @FETCHTABLE1 CHAR(22)
DECLARE @FETCHTABLE2 CHAR(22)
SET @HANTEI = 'ABCDEF'
SET @FETCHTABLE1 = 'DBO.USV_YOSAN'
SET @FETCHTABLE2 = 'DBO.USV_JISEKI'
BEGIN
IF @HANTEI = 'ABCEDF'
SET @AA= @FETCHTABLE2
SELECT * FROM @AA
PRINT @AA
END
以上 よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
このSQLの目的がよくわからないですが、テーブル変数とは、ストアドの中でワークテーブルのように使う変数です。
#とか##がついた一時テーブルと似たようなものです。
おそらくやりたい事はこれでは無くて、SQL構文で実在のテーブルの名前だけを変えたいと言うことだと思います。
ならばSQLを文字列として作成しExecteで実行するなどのやり方か、sp_executesql を使うのがよいと思います。
この回答への補足
ご回答頂いた内容で解決すると思いますが、超初心者としては
あくまで単純にテーブルの名前だけをIF文で判定する値によって
変更したいのです。(何か違うことを言っているかもしれませんが?)
お願いします。
No.2
- 回答日時:
>ご回答頂いた内容で解決すると思いますが、超初心者としては
>あくまで単純にテーブルの名前だけをIF文で判定する値によって
>変更したいのです。(何か違うことを言っているかもしれませんが?)
いや、初心者云々ではなく、Transact-SQLの仕様として、できる事とできない事がある以上、その方法に則って処理する以外にありません。
結論から言いますと、#1 さんの方法が正解です。
「SELECT * FROM @AA」と書いた時点で、(エラーのとおり)これは「テーブル変数」として判断されます。
このままの形では、質問者様のおやりになりたい事は残念ながらできません。
素直に、動的SQL(#1さんの回答)を使ってください。
例)
DECLARE @SQLSTR VARCHAR(100)
(中略)
IF @HANTEI = 'ABCEDF'
SET @AA=@FETCHTABLE2
--動的SQL文を生成
SET @SQLSTR = 'SELECT * FROM ' + @AA
--動的SQL実行
execute (@SQLSTR)
※手元にMSSQL無いので未検証です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessテーブル作成クエリを実...
-
クエリのキャンセルがいつにな...
-
AccessVBAで降順にするテーブル...
-
SQLサーバーのテーブルの値...
-
ユニオンクエリの結果をテーブ...
-
重複するレコードに対しフラグ...
-
SI Object Browserのテーブルス...
-
excel テーブル
-
エクセルでテーブルの最終行が...
-
テーブル作成クエリで新テーブ...
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
-
Accessにインポートしたら並び...
-
accessのロック
-
行方向のデータを横に並べる
-
SELECT時の行ロックの必要性に...
-
Insert Into Select での重複に...
-
accessのエクスポートエラーに...
-
update文で質問です。 下記の条...
-
重複するキーから一番古い年月...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SI Object Browserのテーブルス...
-
クエリのキャンセルがいつにな...
-
ユニオンクエリの結果をテーブ...
-
accessテーブル作成クエリを実...
-
AccessでOracleのテーブルをリ...
-
コンボボックスで入力したもの...
-
エクセルでテーブルの最終行が...
-
UNIONなどで複数のテーブルから...
-
あるテーブルのデータを追加、...
-
アクセスのテーブル作成クエリ...
-
VIEWしか読み取れないユーザの...
-
PL/SQLでFROM句に変数を使いたい
-
Access のリレーションシップで...
-
ADOでSeekメッソッドが使えませ...
-
ストアドをまたがるローカル一...
-
レプリケーションしているテー...
-
SQLサーバーのテーブルの値...
-
リンクサーバー接続先の参照エ...
-
ACCESS-リンクテーブルの設定で...
-
重複するレコードに対しフラグ...
おすすめ情報