Frage

Ich arbeite an einem Linq basierend CLR gespeicherte Prozedur für einig komplexe Filterung und Manipulation, die sonst viel chaotisch und schlecht performanten T-SQL-Code erfordern würde, wenn in einem „traditionellen“ implementiert Stored Procedure.

Das funktioniert großartig, aber ich kann nicht finden, wie in der Phase des Einsatzes, das Schema dieser gespeicherten Prozedur setzen für eine bessere Organisation und die Trennung der Datenbankobjekte in Modulen.

Irgendwelche Ideen?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Wenn Sie die Prozedur erstellen die Assembly verweisen können Sie diese Wrapper erstellen von jedem Schema gehört werden Sie wollen. Siehe Dieser MSDN-Artikel auf CLR gespeicherte Prozeduren bereitstellen für einen Durchlauf, wie eine gespeicherte Prozedur zu tun bereitstellen. Durch die Änderung der Prozedur erstellen Anweisung so etwas wie:

CREATE SCHEMA foo

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

Sie können nun ein Verfahren durch das foo Schema gehört haben.

Andere Tipps

UPDATE: In Visual Studio 2012 diese nun über die Projekteigenschaften Fenster eines erreicht werden "SQL Server-Datenbank-Projektes." Die relevante Eigenschaft ist „Standardschema“ auf „Projekt Einstellungen“. Den Schemanamen vor setzt von Funktionen, Stored Procedures, Etc ... Achten Sie darauf, ein Objekt Schema zu einem Projekt mit dem gleichen Namen hinzuzufügen, oder Sie werden Fehler erhalten ändert die generierte Bereitstellungsskript diesen Wert zu modifizieren bauen.


Ich weiß nicht, welche Version von Visual Studio Sie verwenden, aber wenn Sie ein CLR gespeicherte Prozedur Projekt in Visual Studio 2010 erstellen, das Projekt umfasst zwei SQL-Skripte. PreDeploymentScript.sql und PostDeploymentScript.sql

Wir verwenden nur diese Dinge maniuplate die Art, wie wir wollen.

In der Pre-Deployment-Skript, haben wir so etwas wie folgt aus:

-- 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

Dann wird in dem Post-Deployment-Skript, haben wir diese:

-- 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

Ich hoffe, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top