- - PR -
SQL Server 2005でのCREATE PROCEDUREの実行
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-07 18:24
SQL Server 2005(以下、SQL2005とします)でCREATE PROCEDUREを実行し、
ストアドプロシージャを作成したところ、 SQL Server 2000(以下、SQL2000とします)と違ったストアドプロシージャが 作成されました。 SQL2000で作成されたプロシージャは、先頭にCREATE PROCEDUREが挿入され、 SQL2005で作成されたプロシージャは、先頭にALTER PROCEDUREが挿入されます。 1.これはSQL2005になって変更された点なのでしょうか? (SQL Server のヘルプにも特に記述が見当たりませんでした。) 2.SQL2000と同様の動作をさせる方法(CREATE PROCEDUREを挿入する方法) 以上2点について、どなたか情報をお持ちの方がいましたらお願いします。 【実行したCREATE PROCEDURE】 −−−−−−−−−−−− CREATE PROCEDURE TST_P AS −−−−−−−−−−−− 【SQL2005で作成されたストアドプロシージャ】 −−−−−−−−−−−− ALTER PROCEDURE [dbo].[TST_P] AS GO −−−−−−−−−−−− 【SQL2000で作成されたストアドプロシージャ】 −−−−−−−−−−−− CREATE PROCEDURE TST_P AS GO −−−−−−−−−−−− | ||||||||||||
|
投稿日時: 2008-01-07 19:22
エディションがなんなのか分かりませんが、
SQLServer Management Studioで対象のストアドプロシージャを右クリックして、 「名前をつけてストアドプロシージャをスクリプト化」 →「CREATE」→「新しいクエリエディタウィンドウ」でどうですか? | ||||||||||||
|
投稿日時: 2008-01-07 19:22
SQLServer2005のストアドの編集画面では、 CreatePro⇒AlterPro に命令語が変更になっています。(同様の動きがされるはず・・・) | ||||||||||||
|
投稿日時: 2008-01-07 20:22
よっしーさん、地図さん返信ありがとうございます。
エディションはExpress Editionです。
試してみたところ、ALTER PROCEDUREがCREATE PROCEDUREに変更されました。 ただ、これだとCREATE PROCEDUREに変更されたストアドプロシージャを SQL Server内に保存できないようです。 (外部ファイル(*.SQL)でしか保存できない) できれば、ALTER PROCEDUREになったストアドプロシージャそのものを修正したいと思っています。
これは、ヘルプ等に「変更になった」という記述があるのでしょうか? | ||||||||||||
|
投稿日時: 2008-01-08 00:12
それがALTER PROCEDUREです。 | ||||||||||||
|
投稿日時: 2008-01-08 10:53
・・・何処に記述してあったかは忘れちゃいました。。。。 補足で・・・・・。 名称そのものを変更するのであれば・・・ @プロシー一覧で右クリして、名前変更 A変更したプロシーを編集画面で上記の名前と同一の名前変更 (ここで内容も変更出来るはず???) @だけだと、変更前と一緒になってしまうと思います・・・・。 | ||||||||||||
|
投稿日時: 2008-01-08 11:09
よっしーさん、地図さん返信ありがとうございます。
ストアドプロシージャの修正についてはこれを使おうと思います。 ただ、新規で作成した場合は、再度ALTER PROCEDUREを 実行しなければいけないということでしょうか?
そうでしたか・・・残念です。 ただ、どこかにあるということなので、もう一度資料を見直してみます。 | ||||||||||||
|
投稿日時: 2008-01-09 02:41
なんだか勘違いされている気がしますが。
>SQL2000で作成されたプロシージャは、先頭にCREATE PROCEDUREが挿入され、 >SQL2005で作成されたプロシージャは、先頭にALTER PROCEDUREが挿入されます。 まあそれはその通りなんですが。。 SQLServer Management StudioやEnterprise Managerはただの管理ツールであり、データベースエンジンから情報を受け取ったり、あるいはデータを送信したりするだけのものです。ただのコンソールであって本体と通信しているだけ。極論を言ってしまえばデータベースアクセスをするWebアプリなんかと同じ存在です。 SQLServer Management Studioがストアドの中身を変更している訳ではなく、データベースエンジンから得たストアドの情報を、修正が行いやすいようALTER PROCEDUREで表示しているだけです。 Enterprise Managerではストアドの情報を表示する場合は常にCREATE PROCEDUREでしたが、SQLServer Management Studioでは開発環境としての機能が強化されているので、修正しやすいように「変更」などでストアドを開くとALTER PROCEDUREになります。 ストアドに限らずビューなどもこのような仕様になっており、より開発しやすいようになっていますね。 中身書き換えてF5押せば修正できるので。 CREATE PROCEDUREはストアドを新規作成するためのもの。同名のストアドがあればエラーになります。 ALTER PROCEDUREは既存のストアドを修正するためのもの。同名のストアドがなければエラーになります。 この点については全く変更されていません。 CREATE文とALTER文はストアド以外にDATABASE,TABLE,VIEWなどでも存在しますが、概ね同じような関係になっています。 新規にストアドを作成する場合はテンプレートを使用するか、右クリックメニューから新規作成すればCREATE PROCEDUREではじまる雛形が表示されるはずです。 >ただ、これだとCREATE PROCEDUREに変更されたストアドプロシージャを >SQL Server内に保存できないようです。 >(外部ファイル(*.SQL)でしか保存できない) >できれば、ALTER PROCEDUREになったストアドプロシージャそのものを修正したいと思っています。 これも、SQLServer Management Studioがデータベースエンジンの管理ツールだってことを知らないことから来る誤解かなあ。 自分が書いた、あるいはSQLServer Management Studioが生成したクエリを実行するにはF5キーを押すかIDEの上のほうにある実行ボタンを押す必要があります。SQLServer2000のクエリアナライザと同じです。 テーブルの作成や修正を行う場合は保存ボタンでやっていると思いますが、これは内部的にCREATE TABLEやALTER TABLEをSQLServer Management Studioがデータベースエンジンに対して発行してくれてるだけで、実際には保存をしている訳ではないです。 (プロファイラをみると、Management Studioがどのようなクエリを発行しているかが分かります) ストアドの場合はテーブルやビューのような視覚的操作での作成や変更はできないので、開発者自身がクエリを書いてそれをデータベースエンジンに対して発行することになります。 この際のIDEの保存ボタンは、書いたクエリをファイルとして保存するためのもので、テーブル作成のときのものとは別物です。 ※Express EditionではSQLServer Management Studioの機能が制限および簡略化されているので若干の違いはあるかもしれません。Standard Editionの内容で説明しています。 |