-- ============================================= -- Description: a megadott függvények törlése a megadott vagy összes sémában -- ============================================= SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('dbo.sp_Global_DeleteFunctions') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_Global_DeleteFunctions] END GO CREATE PROCEDURE [dbo].[sp_Global_DeleteFunctions] @pSchemaName NVARCHAR(100), -- pl: 'KR_BEDO_Schema' | NULL esetén az összes sémán végigmegy @pFunctionNames XML -- pl: 'fnGetHetNapja' AS BEGIN DECLARE @functionName NVARCHAR(4000) DECLARE @schemaName NVARCHAR(100) DECLARE @deleteFunctionSQL NVARCHAR(4000) DECLARE @schemaNames CURSOR IF @pSchemaName IS NOT NULL SET @schemaNames = CURSOR LOCAL FOR SELECT @pSchemaName ELSE SET @schemaNames = CURSOR LOCAL FOR SELECT name FROM sys.schemas WHERE principal_id = 1 ORDER BY name DECLARE @functions CURSOR SET @functions = CURSOR LOCAL FOR SELECT DISTINCT FunctionName.value('(.)[1]', 'varchar(100)') FROM @pFunctionNames.nodes('FunctionNames/FunctionName') AS FunctionNames(FunctionName) OPEN @functions FETCH NEXT FROM @functions INTO @functionName WHILE @@FETCH_STATUS = 0 BEGIN OPEN @schemaNames FETCH NEXT FROM @schemaNames INTO @schemaName WHILE @@FETCH_STATUS = 0 BEGIN SET @deleteFunctionSQL = 'IF OBJECT_ID(''[' + @schemaName + '].' + @functionName + ''') IS NOT NULL DROP FUNCTION [' + @schemaName + '].' + @functionName PRINT @functionName + ' ' + @schemaName EXEC sp_executesql @deleteFunctionSQL FETCH NEXT FROM @schemaNames INTO @schemaName END CLOSE @schemaNames FETCH NEXT FROM @functions INTO @functionName END CLOSE @functions DEALLOCATE @functions DEALLOCATE @schemaNames END