Question

Je travaille sur un CLR base Linq procédure stockée pour un filtrage et une manipulation complexe, qui autrement exigerait beaucoup de code T-SQL désordre et mal performant, si elles sont appliquées dans un plus « traditionnel » procédure stockée.

Cela fonctionne très bien, mais je ne peux pas trouver comment définir le schéma de cette procédure stockée en phase de déploiement, pour une meilleure organisation et la séparation des objets de base de données dans les modules.

Toutes les idées?

Un grand merci à l'avance.

Était-ce utile?

La solution

Lorsque vous créez la procédure de référencement de l'ensemble, vous pouvez créer cette enveloppe étant la propriété de tout schéma que vous voulez. Voir Cet article MSDN sur le déploiement de procédures stockées CLR pour une visite virtuelle de la façon de faire déployer une procédure stockée. En changeant la procédure create à quelque chose comme:

CREATE SCHEMA foo

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

Vous pouvez maintenant avoir une procédure appartenant au schéma foo.

Autres conseils

Mise à jour: Dans Visual Studio 2012 peut maintenant être réalisé par les propriétés du projet fenêtre d'un "projet de base de données SQL Server." La propriété est pertinente « schéma par défaut » dans l'onglet « Paramètres du projet ». La modification de cette valeur modifie le script de déploiement généré pour mettre le nom du schéma devant des fonctions, procédures stockées, etc ... Assurez-vous d'ajouter un objet schéma à votre projet avec le même nom ou vous obtiendrez des erreurs de compilation.


Je ne sais pas quelle version de Visual Studio que vous utilisez, mais lorsque vous créez un projet de procédure stockée CLR dans Visual Studio 2010, le projet comprend deux scripts SQL. PreDeploymentScript.sql et PostDeploymentScript.sql

Nous utilisons simplement ces choses à maniuplate la façon dont nous voulons.

Dans le script de pré-déploiement, nous avons quelque chose comme ceci:

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

Ensuite, dans le script de post-déploiement, nous avons ceci:

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

L'espoir qui aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top