- PR -

SQL Server 2005でのCREATE PROCEDUREの実行

投稿者投稿内容
KUMAKEN
会議室デビュー日: 2008/01/07
投稿数: 4
投稿日時: 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
−−−−−−−−−−−−

よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-01-07 19:22
エディションがなんなのか分かりませんが、
SQLServer Management Studioで対象のストアドプロシージャを右クリックして、
「名前をつけてストアドプロシージャをスクリプト化」
→「CREATE」→「新しいクエリエディタウィンドウ」でどうですか?
地図
会議室デビュー日: 2007/12/26
投稿数: 12
投稿日時: 2008-01-07 19:22
引用:

KUMAKENさんの書き込み (2008-01-07 18:24) より:

1.これはSQL2005になって変更された点なのでしょうか?
 (SQL Server のヘルプにも特に記述が見当たりませんでした。)
2.SQL2000と同様の動作をさせる方法(CREATE PROCEDUREを挿入する方法)



SQLServer2005のストアドの編集画面では、
CreatePro⇒AlterPro
に命令語が変更になっています。(同様の動きがされるはず・・・)
KUMAKEN
会議室デビュー日: 2008/01/07
投稿数: 4
投稿日時: 2008-01-07 20:22
よっしーさん、地図さん返信ありがとうございます。

引用:
エディションがなんなのか分かりませんが


エディションはExpress Editionです。

引用:
SQLServer Management Studioで対象のストアドプロシージャを右クリックして、
「名前をつけてストアドプロシージャをスクリプト化」
→「CREATE」→「新しいクエリエディタウィンドウ」でどうですか?


試してみたところ、ALTER PROCEDUREがCREATE PROCEDUREに変更されました。
ただ、これだとCREATE PROCEDUREに変更されたストアドプロシージャを
SQL Server内に保存できないようです。
(外部ファイル(*.SQL)でしか保存できない)
できれば、ALTER PROCEDUREになったストアドプロシージャそのものを修正したいと思っています。


引用:
SQLServer2005のストアドの編集画面では、
CreatePro⇒AlterPro
に命令語が変更になっています。(同様の動きがされるはず・・・)


これは、ヘルプ等に「変更になった」という記述があるのでしょうか?
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-01-08 00:12
引用:

ストアドプロシージャそのものを修正したいと思っています。


それがALTER PROCEDUREです。
地図
会議室デビュー日: 2007/12/26
投稿数: 12
投稿日時: 2008-01-08 10:53
引用:

KUMAKENさんの書き込み (2008-01-07 20:22) より:

これは、ヘルプ等に「変更になった」という記述があるのでしょうか?


・・・何処に記述してあったかは忘れちゃいました。。。。

補足で・・・・・。
名称そのものを変更するのであれば・・・
@プロシー一覧で右クリして、名前変更
A変更したプロシーを編集画面で上記の名前と同一の名前変更
 (ここで内容も変更出来るはず???)
@だけだと、変更前と一緒になってしまうと思います・・・・。

KUMAKEN
会議室デビュー日: 2008/01/07
投稿数: 4
投稿日時: 2008-01-08 11:09
よっしーさん、地図さん返信ありがとうございます。

引用:
それがALTER PROCEDUREです。


ストアドプロシージャの修正についてはこれを使おうと思います。
ただ、新規で作成した場合は、再度ALTER PROCEDUREを
実行しなければいけないということでしょうか?

引用:
・・・何処に記述してあったかは忘れちゃいました。。。。


そうでしたか・・・残念です。
ただ、どこかにあるということなので、もう一度資料を見直してみます。

OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 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の内容で説明しています。

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