展開中のCLRストアドプロシージャのスキーマ
-
29-09-2019 - |
質問
Visual Studio(2010)の構成に興味があり、C#CLRデータベースプロジェクトを展開するときに、DBO以外のスキーマに物を置くようにします。私は機能/手順/などを更新できることを理解しています...ラッパーこれを実現するために手動で作成するラッパー:CLRストアドプロシージャ:スキーマ/所有者を設定する方法は?
しかし、どういうわけかプロセスを自動化したいと思います。誰かが知っているなら、私は本当に答えに感謝します!
解決
この質問は、生成されたT-SQLラッパーオブジェクトの「デフォルトスキーマ」構成フィールドを備えたVisual Studio 2012の時点で時代遅れであることに言及する必要があります。これは、次の回答の上部にある「更新」セクションにも記載されています ;-) :
他のヒント
ストアドプロシージャをあるスキーマから別のスキーマに変更できます
ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany
セキュリティ関連であり、「設計によって」行われているようです。 http://support.microsoft.com/kb/918346
以下のように、各オブジェクトにポスト展開スクリプトにスクリプトを配置できます。以下のスクリプトは、Schema [org]を使用してストアドプロシージャを再作成します。お役に立てれば。
ステップ1-デフォルトスキーマ[DBO]で作成されているため、プロジェクトによって自動的に追加されたストアドプロシージャを削除します。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[spUpdateCompany]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[spUpdateCompany]
GO
ステップ2- [org]スキーマに既に存在する場合はストアドプロシージャを削除し、[org]スキーマのストアドプロシージャを再作成します。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Org].[spUpdateCompany]') AND type in (N'P', N'PC'))
DROP PROCEDURE [Org].[spUpdateCompany]
GO
CREATE PROCEDURE [Org].[spUpdateCompany]
@Id int,
@Name [nvarchar](4000)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SQLServerProject.CLR].[StoredProcedures].[spUpdateCompany]
GO
SSDTプロジェクトのSQLCLRプロパティでは、「DDLの生成」をオフにできます。次に、CLRアセンブリに接続する独自のSQLオブジェクトを作成できます。たとえば、新しいストアドプロシージャを追加します
CREATE PROCEDURE [schema].[StoredProcedure]
@parameter BIGINT NULL
AS EXTERNAL NAME [AssemblyNameFromProjectProperties].[ClassWithProcedure].[Method];
GO
これにより、異なるオブジェクトをさまざまなスキーマに配置できます