J'ai une procédure stockée qui met à jour plusieurs agrégats et une fonction - en les supprimant, en les assemblant et en les réimportant.Création d'une fonction dans une procédure stockée
Mon code:
CREATE PROCEDURE [maint].[UpdateSqlClr]
AS
BEGIN
IF OBJECT_ID('dbo.[HistoricAnalysis]') IS NOT NULL
DROP FUNCTION [dbo].[HistoricAnalysis];
IF OBJECT_ID('dbo.[OverallStatus]') IS NOT NULL
DROP AGGREGATE [dbo].[OverallStatus];
IF OBJECT_ID('dbo.[OverallStatusBreakdown]') IS NOT NULL
DROP AGGREGATE [dbo].[OverallStatusBreakdown];
IF EXISTS
(
SELECT *
FROM sys.assemblies
WHERE [name] = 'SuperDbSqlCLR'
)
DROP ASSEMBLY [SuperDbSqlCLR];
CREATE ASSEMBLY [SuperDbSqlCLR] FROM 'd:\Super\SuperDb.Sql.CLR\SuperDb.SqlClr.dll' WITH PERMISSION_SET = SAFE;
CREATE AGGREGATE [dbo].[OverallStatus]
(@input [NVARCHAR](4000)
)
RETURNS [NVARCHAR](4000)
EXTERNAL NAME
SuperDbSqlCLR.[SuperDb.SqlClr.OverallStatus];
CREATE AGGREGATE [dbo].[OverallStatusBreakdown]
(@input [NVARCHAR](4000)
)
RETURNS [NVARCHAR](4000)
EXTERNAL NAME
[SuperDbSqlCLR].[SuperDb.SqlClr.OverallStatusBreakdown];
-- Where the GO would be in a query window
CREATE FUNCTION [dbo].[HistoricAnalysis]()
RETURNS TABLE (
[Sequence] [int] NULL,
[Text] [nvarchar](100) NULL
)
AS
EXTERNAL NAME [SuperDbSqlCLR].[SuperDb.SqlClr.UserDefinedFunctions].[HistoricAnalysis]
END
Le problème est que si je peux ajouter un GO quand semblent juste courir le contenu de la procédure stockée dans une fenêtre de requête, créations SProc ne pas aimer la déclaration GO et à chaque fois, j'obtiens une erreur de syntaxe que 'CREATE FUNCTION' doit être la seule déclaration dans le lot -
Y at-il de toute façon à faire cela dans un SPROC?
Ceci est un copout, mais: l'avez-vous essayé en SQL dynamique? –
Ce n'est pas un copout ... Le SQL dynamique est la façon ** SEULEMENT ** de créer une fonction à partir d'une procédure stockée. –
@ DanielA.Thompson: ce n'est pas un copout - c'est la manière standard de faire ce genre de chose. À mon avis, c'est une chose étrange à faire. Mais je soutiens les modes de vie alternatifs. –