- - PR -
SQLServerのストアードプロシジャについて
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-07-02 14:27
Sybaseのプロシージャ(SP)でパラメータでDB名とオーナ名を引渡し、
Selectなどをしたいのですがコンパイルが通りません。 教えて下さい。宜しくお願いします。 ※当処理は、2つのデータベースが存在します。 1つのプロシージャで、2つのデータベース内の テーブルを制御します。isqlのログイン時は、USE文にて DB1を指定し、ログインをしています。 1.DB1:boo_mst 2.DB2:foo_mst 問題は、 @DB_name .@DB_Owner .foo_mst のみコンパイルエラーになります。 == SQL文 ======================= create procedure DM_SPC_foo_mst (@DB_name varchar(15), @DB_Owner varchar(15), @foo_cd int) as begin select count(*) from boo_mst select foo_cd, foo_name, foo_short_name, foo_fb_name from @DB_name.@DB_Owner.foo_mst where @foo_cd = foo_cd end go ================================ |
|
投稿日時: 2004-07-02 14:45
こんにちは。
どのようなコンパイルエラーがでてますか? |
|
投稿日時: 2004-07-02 16:38
返信を有難う御座います。
エラー内容ですが、次に添付しますがコーディングに 若干の違いがあります。 ==== コード ==== 1> create procedure DM_SPC_foo_mst 2> (@DB_name varchar(15), @DB_Owner varchar(15), @bank_cd int) as 3> 4> declare @a varchar(15) ← 確認で入れました。 5> declare @b varchar(15) ← 確認で入れました。 6> 7> select @a = 'foodb' ← 確認で入れました。 8> select @b = 'dbo' ← 確認で入れました。 9> 10> begin 11> select 12> bank_cd, 13> bank_name, 14> bank_short_name, 15> bank_fb_name 16> from 17> @a.@b.foo_mst 18> where 19> @bank_cd = bank_cd 20> 21> end 22> go Msg 102, Level 15, State 1: Server 'foo001', Procedure 'DM_SPC_foo_mst', Line 17: '@a' の近くに、構文エラーがあります。 1> |
|
投稿日時: 2004-07-02 17:00
たぶん無理じゃないのかな?
私の知る限りそこに変数を指定できる物は知りません。 そういう場合、だいたい動的SQLを利用すると思いますが。 ところで、データベースは何なんでしょ? タイトルはSQL Server、本文はSybase、どちらでしょうか? |
|
投稿日時: 2004-07-02 17:12
返信、有難う御座います。
DBはSybaseです。 無知で、すみませんが動的SQLと言うのは直接コードを 定義すると意味でしょうか? 例えば、 select foo_cd, foo_name, foo_short_name, foo_fb_name from foodb.dbo.foo_mst ← この意味ですか? where @foo_cd = foo_cd 上記の意味だと、複数環境でDB名、オーナー名が 異なる場合は、コードの変更が発生しますので、 これを防ぎたいのです。 ORACLEなどは、シノニムなので対応はできるのですが。 宜しくお願いします。 |
|
投稿日時: 2004-07-02 17:21
SQL Serverのストアド・プロシージャでは、「テーブル変数」と呼ばれる特殊な変数を用いることにより、プロシージャ内でテーブルを定義し作成することができます。
しかし、テーブル変数をパラメータとして受け渡しすることはできません。(プロシージャの値として返すことはできます。) ご提示の仕様で実現するとしたら、IF〜ELSEによりテーブル名やオーナ名を判定し、それの値ごとにSELECTを記述するしかないと思われます。 |
|
投稿日時: 2004-07-02 17:31
動的SQLとはSQL文を文字列として編集してそれを実行するという物です。
まぁ、クライアントサイドでのパラメータを利用しないSQLの実行と同じ物です。 残念ながら、私はSybaseでの動的SQLの実行方法は知りません。 Googleで一発で出てくるかと思ったけど、出てきませんでした。 [動的SQL Sybase] ちなみにSQL Serverではsp_executesql, OracleではIMMEDIATEを実行するようです。 Sybaseって国内ではマイナーすぎ。 |
1
