8


0

私はいくつかの複雑なフィルタリングと操作のためのLinqベースのCLRストアドプロシージャに取り組んでいます。そうでなければもっと「伝統的な」ストアドプロシージャで実装された場合、面倒でパフォーマンスの悪いT-SQLコードをたくさん必要とします。

これはうまく機能していますが、このストアドプロシージャのスキーマを展開の段階で設定して、モジュール内のデータベースオブジェクトを整理して分離する方法を見つけることができません。

何か案は?

事前に感謝します。

2 Answer


11


更新: Visual Studio 2012では、これは "SQL Serverデータベースプロジェクト"のプロジェクトプロパティウィンドウを介して実行できるようになりました。関連するプロパティは、[プロジェクト設定]タブの[デフォルトスキーマ]です。 この値を変更すると、生成されたデプロイメントスクリプトが変更され、スキーマ名が関数、ストアドプロシージャなどの前に配置されます。 スキーマオブジェクトを必ず同じ名前でプロジェクトに追加してください。そうしないと、ビルドエラーが発生します。

'' '' '

使用しているVisual Studioのバージョンはわかりませんが、Visual Studio 2010でCLRストアドプロシージャプロジェクトを作成すると、そのプロジェクトにはPreDeploymentScript.sqlとPostDeploymentScript.sqlの2つのSQLスクリプトが含まれます。

私たちはこれらを使って物事を好きなように操作します。

展開前のスクリプトには、次のようなものがあります。

 - 既存のスキーマから既存の項目を削除します(sys.objectsからSELECT * FROM object_id = OBJECT_ID(N '[ユーティリティ]。[fn_Create_Md5_Hash]')および(N'FN '、N'IF'、N'TF '、N'FS'、N'FT '))ドロップ機能[ユーティリティ]。[fn_Create_Md5_Hash] GO

そして、展開後のスクリプトでは、次のようになります。

 - デプロイウィザードがdboスキーマ内のアイテムを再作成します -  dboスキーマから新しいアイテムが存在する場合はドロップします(sys * objectからWHERE object_id = OBJECT_ID(N '[dbo]。[fn_Create_Md5_Hash]')を入力し、(N'FN ') 、N'IF '、N'TF'、N'FS '、N'FT'))DROP FUNCTION [dbo]。[fn_Create_Md5_Hash] GO

 - 関数を作成したいスキーマに再作​​成する[ユーティリティ]。[fn_Create_Md5_Hash](@ source [varbinary](max))戻り値[varbinary](8000)EXECUTE AS CALLER AS EXTERNAL NAME [NameSpace]。 [fn_Create_Md5_Hash] GO

それが役立つことを願っています!


2


アセンブリを参照するプロシージャを作成するときに、必要なスキーマが所有するこのラッパーを作成できます。 ストアドプロシージャを展開する方法のチュートリアルについては、http://msdn.microsoft.com/en-us/library/ms254956(VS.80).aspx [このCLRストアドプロシージャの展開に関するMSDNの記事]を参照してください。 create procedure文を次のように変更します。

CREATE SCHEMA foo

CREATE PROCEDURE foo.hello
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld

これで `foo`スキーマが所有する手続きを手に入れることができます。