- PR -

テーブル名の指定の仕方について

1
投稿者投稿内容
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 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'の近くに無効な構文があります 」
というエラーがでてしまいます。

テーブル名を引数で扱うことはできないのでしょうか?

よろしくお願いいたします。

NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2005-04-06 17:11
今晩は。

あれ?@ってこういう場合2つ重ねなきゃいけなくなかったっけ?

って事で確認して下さりませ。 
_________________
Inspired Ambitious
ISMS Assistant Auditor
げじげじ
会議室デビュー日: 2004/08/04
投稿数: 6
お住まい・勤務地: 住まい:杉並区 勤務地:田町
投稿日時: 2005-04-06 17:17
はじめまして。

SQL文の書き方として、
selectした結果を別テーブルへinsertするのは
insert into テーブル名1 select * from テーブル名2
だったような気がします。
プロシージャを作ったことがないので自信はないですが。

そもそもDBは何ですか?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-06 17:23
それらしい構文なので SQL Server で書かれていると仮定します。
Books Online では根拠が見つからなかったのですが、パラメータクエリに渡すパラメータは
値に対する置換しか行えません。

したがって、動的クエリを用いることになると思います。
SQL Server であれば、sp_executesql を使用します。

[ メッセージ編集済み 編集者: にしざき 編集日時 2005-04-06 17:24 ]
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 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に渡すということになるのですよね?できれば、動的クエリを用いる方法は避けて、
簡単にプロシージャでできればと思ったのですが。。。。


 


きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-04-07 13:33
引用:

げじげじさんの書き込み (2005-04-06 17:17) より:
SQL文の書き方として、
selectした結果を別テーブルへinsertするのは
insert into テーブル名1 select * from テーブル名2
だったような気がします。


SQLServer の「SELECT .... INTO ...」は、Oracle の「CREATE TABLE ... AS SELECT .... 」に当たります。

引用:

Yokoさんの書き込み (2005-04-06 17:45) より:
よね?できれば、動的クエリを用いる方法は避けて、
簡単にプロシージャでできればと思ったのですが。。。。


プロシージャ内から sp_executesql を呼び出せば良いんじゃないですか?
1

スキルアップ/キャリアアップ(JOB@IT)