- - PR -
テーブル名の指定の仕方について
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-06 17:06
いつもお世話になっております。
さっそくですが、テーブル名の指定の仕方について質問があります。 次のようなプロシージャを作成したいと思っています。 CREATE PROCEDURE sp_TableCopy ( @table_name char(24) ) AS -- TableAを@table_nameで指定した名前のテーブルへコピー -- SELECT * INTO @table_name FROM TableA これを実行すると 「 '@table_name'の近くに無効な構文があります 」 というエラーがでてしまいます。 テーブル名を引数で扱うことはできないのでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-04-06 17:11
今晩は。
あれ?@ってこういう場合2つ重ねなきゃいけなくなかったっけ? って事で確認して下さりませ。 _________________ Inspired Ambitious ISMS Assistant Auditor | ||||||||
|
投稿日時: 2005-04-06 17:17
はじめまして。
SQL文の書き方として、 selectした結果を別テーブルへinsertするのは insert into テーブル名1 select * from テーブル名2 だったような気がします。 プロシージャを作ったことがないので自信はないですが。 そもそもDBは何ですか? | ||||||||
|
投稿日時: 2005-04-06 17:23
それらしい構文なので SQL Server で書かれていると仮定します。
Books Online では根拠が見つからなかったのですが、パラメータクエリに渡すパラメータは 値に対する置換しか行えません。 したがって、動的クエリを用いることになると思います。 SQL Server であれば、sp_executesql を使用します。 [ メッセージ編集済み 編集者: にしざき 編集日時 2005-04-06 17:24 ] | ||||||||
|
投稿日時: 2005-04-06 17:45
NAOさん、げじげじさん、にしざきさん お返事ありがとうございます。
使用しているデータベースはSQL SERVERで、 開発環境は .NETでC#を使用しています。 -- 引用部分 -- あれ?@ってこういう場合2つ重ねなきゃいけなくなかったっけ? ---------- @を2つ重ねて見ましたがエラーは解消されませんでした。 -- 引用部分 -- SQL文の書き方として、 selectした結果を別テーブルへinsertするのは insert into テーブル名1 select * from テーブル名2 だったような気がします。 ---------- テーブル名をきちんと指定してこの構文を実行すると、 正常にコピーできていたのを確認しています。 -- 引用部分 -- したがって、動的クエリを用いることになると思います。 SQL Server であれば、sp_executesql を使用します。 ---------- やはり私が書いたようなテーブル名を引数にする方法はできないということでしょうか? これだと.NET上でクエリ文を作成してからsp_executesqlに渡すということになるのですよね?できれば、動的クエリを用いる方法は避けて、 簡単にプロシージャでできればと思ったのですが。。。。 | ||||||||
|
投稿日時: 2005-04-07 13:33
SQLServer の「SELECT .... INTO ...」は、Oracle の「CREATE TABLE ... AS SELECT .... 」に当たります。
プロシージャ内から sp_executesql を呼び出せば良いんじゃないですか? | ||||||||
1
