2010-11-30 56 views

回答

4

您可以從一個架構使用更改存儲過程到另一個

ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany 
1

它似乎是安全相關的,並通過設計完成。 http://support.microsoft.com/kb/918346

+2

我說的是,當你用鼠標右鍵單擊在Visual一個SQL CLR項目發生了什麼Studio並點擊「部署」。它將您的程序集放入SQL Server中,然後生成調用裝配方法的T-SQL包裝函數和存儲過程。據我所知,這些包裝總是進入dbo模式。爲了組織的目的,我想將它們放在一個單獨的模式中。到目前爲止,我所管理的最好的方法是手動編輯項目中的部署前和部署後的SQL腳本,以刪除並重新創建我希望它們的Schema中的項目,但這是每個項目的手動過程。 – 2011-01-04 18:45:49

1

您可以像下面那樣爲後置部署腳本中的每個對象放置腳本。下面的腳本使用模式[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 
+0

這整個事情可以簡化爲一行:ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany。任何與該DLL關聯的對象在部署之前都必須放棄,因爲它們依賴於該DLL。 – Griffin 2012-03-14 00:36:47

+0

我原本希望在Visuatl Studio中會有一個配置Schema的地方,但我從未找到過。這是我們採取的方法...前後部署腳本。 – 2012-06-27 18:42:28

0

應該提到的是,這個問題是過時,因爲它有一個「默認模式」配置字段中的Visual Studio 2012的生成的T-SQL包裝器對象。這也被「更新」一節中指出,在下面的答案頂部;-)

CLR Stored Procedures: how to set the schema/owner?