Domanda

Sto lavorando su un CLR basato Linq stored procedure per un po 'di filtraggio complesso e manipolazione, che altrimenti richiederebbe un sacco di codice T-SQL disordinato e mal performante, se attuate in modo più "tradizionale" stored procedure.

Questo è il lavoro grande, ma non riesco a trovare come impostare lo schema di questa stored procedure in fase di implementazione, per una migliore organizzazione e la separazione degli oggetti di database in moduli.

Tutte le idee?

Molte grazie in anticipo.

È stato utile?

Soluzione

Quando si crea la procedura di riferimento il gruppo è possibile creare questo wrapper essere di proprietà di qualsiasi schema che si desidera. Vedere questo articolo di MSDN sulla distribuzione di procedure CLR memorizzato per una procedura dettagliata di come fare implementare una stored procedure. Cambiando l'istruzione CREATE PROCEDURE a qualcosa di simile:

CREATE SCHEMA foo

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

È ora possibile avere una procedura di proprietà del foo schema.

Altri suggerimenti

UPDATE: In Visual Studio 2012 può ora essere realizzato tramite la finestra delle proprietà del progetto di un "progetto di database SQL Server." La proprietà in questione è "Schema di default" nella scheda "Impostazioni di progetto". La modifica di questo valore modifica lo script di distribuzione generato per mettere il nome dello schema di fronte a delle funzioni, stored procedure, ecc ... Assicurarsi di aggiungere un oggetto dello schema al progetto con lo stesso nome o avrete costruire errori.


Non so quale versione di Visual Studio che si sta utilizzando, ma quando si crea un progetto di CLR memorizzato procedure in Visual Studio 2010, il progetto prevede due script SQL:. PreDeploymentScript.sql e PostDeploymentScript.sql

Abbiamo appena utilizzare questi per maniuplate le cose nel modo che vogliamo.

Nello script pre-distribuzione, abbiamo qualcosa di simile a questo:

-- DROP EXISTING ITEM FROM CURRENT SCHEMA
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Utilities].[fn_Create_Md5_Hash]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [Utilities].[fn_Create_Md5_Hash]
GO

Poi, nello script post-distribuzione, abbiamo questa:

-- DEPLOYMENT WIZARD RECREATES ITEM IN dbo SCHEMA
-- DROP NEW ITEM FROM dbo SCHEMA
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_Create_Md5_Hash]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[fn_Create_Md5_Hash]
GO

-- RECREATE THE ITEM BACK IN THE SCHEMA YOU WANT
CREATE FUNCTION [Utilities].[fn_Create_Md5_Hash](@source [varbinary](max))
RETURNS [varbinary](8000) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [NameSpace].[UserDefinedFunctions].[fn_Create_Md5_Hash]
GO

Speranza che aiuta!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top