none
ストアドプロシージャのローカルプロシージャ RRS feed

  • 質問

  • SQL Server2008でストアドプロシージャを作成する事になったのですが、オラクルのPL/SQLのようにストアドプロシージャ内にあってストアドプロシージャ内からコール出来るローカルプロシージャと言うものは定義出来ないのでしょうか。

    別なパブリック(?)なストアドプロシージャを作成して、それをコールすると言う事が出来るのかも知れませんが、出来れば一つのストアドプロシージャで完結させたいのです。

    ご回答の程よろしくお願いします。

    2011年4月14日 21:44

回答

  • 可読性がいまいちですが、一時ストアドプロシージャを sp_executesql で作成するとストアドプロシージャ内でストアドプロシージャを作成することはできるかと。

    CREATE PROCEDURE usp_Parent
    AS
    BEGIN
    SET NOCOUNT ON
    	
    	DECLARE @sql nvarchar(1000) = 
    	'CREATE PROCEDURE #usp_child
    	AS
    	BEGIN
    		SELECT @@VERSION
    	END'
    
    
    	EXEC sp_executesql @sql
    	EXEC #usp_child
    	DROP PROCEDURE #usp_child
    END
    GO
    
    EXEC usp_Parent
    
    ご参考になれば幸いです。
    2011年4月14日 23:01
    モデレータ
  • この分野に詳しくありませんので役に立つかわかりませんが、SQL Server 2008では空間ストレージというものをサポートしています。geometry、geography、SRIDといったキーワードが出てきていますので、ストアドプロシージャで実装しようとしている変換処理が楽に行えるかもしれません。
    2011年4月15日 0:09

すべての返信

  • 可読性がいまいちですが、一時ストアドプロシージャを sp_executesql で作成するとストアドプロシージャ内でストアドプロシージャを作成することはできるかと。

    CREATE PROCEDURE usp_Parent
    AS
    BEGIN
    SET NOCOUNT ON
    	
    	DECLARE @sql nvarchar(1000) = 
    	'CREATE PROCEDURE #usp_child
    	AS
    	BEGIN
    		SELECT @@VERSION
    	END'
    
    
    	EXEC sp_executesql @sql
    	EXEC #usp_child
    	DROP PROCEDURE #usp_child
    END
    GO
    
    EXEC usp_Parent
    
    ご参考になれば幸いです。
    2011年4月14日 23:01
    モデレータ
  • ストアドプロシージャ内で、あるテーブル内のNULLではない緯度経度を公共座標に変換すると言う事をしないといけないので今回質問させて貰いました。

    Visual Basic .NETで書かれたライブラリはあるのですが、SQL Serverのストアドプロシージャから.NETのexeやdllをコールする事なんて出来ないですよね。

    SQL Serverで関数を作成して、それをコールすると言う方法もありますが、会社の指示が、出来れば一つのストアドプロシージャで完結させて欲しいらしいのです。

    Ozawaさんのおっしゃる方法を試してみます。

    2011年4月14日 23:26
  • この分野に詳しくありませんので役に立つかわかりませんが、SQL Server 2008では空間ストレージというものをサポートしています。geometry、geography、SRIDといったキーワードが出てきていますので、ストアドプロシージャで実装しようとしている変換処理が楽に行えるかもしれません。
    2011年4月15日 0:09
  • 今回作成するストアドプロシージャの目的はデータベース内の緯度経度(real型で格納されています)と引数で与えた緯度経度の距離を求めると言うものです。

    佐祐理さんに教えて頂いた「空間ストレージ」と言うページを見ると、以下の記述がありました。

    geography データ型を使用して空間データの計算を実行する場合、計算結果は、データの作成に使用された楕円体によって異なります。これは、各楕円体に特定の SRID (spatial reference identifier) が割り当てられているからです。

    「空間ストレージ」を使用して私の目的を達するのは少し大変そうです。

    その後、グーグルで「緯度経度から距離を算出」と言うキーワードで検索すると、幾つか計算式が載っていました。

    緯度経度を公共座標に変換して距離を求めるよりも、こちらの方が早道の様です。

    Masayuki.Ozawaさん、佐祐理さん、ありがとうございました。

    2011年4月15日 1:19