1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ADMIN_D] @LNK_Name nvarchar(60) ,@bdd varchar(50) ,@PS VARCHAR(80), @SCH SYSNAME = 'dbo'
AS
Declare @sqlm varchar(max)
Declare @sql1 nvarchar(max)
Declare @sql nvarchar(max)
Declare @sqlZ varchar(max)
Declare @LINK nvarchar(max)
Declare @LINK1 nvarchar(max)
Declare @LINK2 varchar(max)
--Declare @bdd varchar(35)
Declare @Login varchar(80)
Declare @Datetime datetime
SET NOCOUNT ON;
IF (ORIGINAL_LOGIN() IN (''))
BEGIN;
PRINT 'Déploiement interdit - Contactez l''équipe SQL ';
RETURN;
END;
SET @Datetime = Getdate()
SET @Login = system_user
SELECT @sql = Definition
FROM sys.procedures p
INNER JOIN sys.sql_modules m ON p.object_id = m.object_id
where name = @PS and p.schema_id = SCHEMA_ID(@SCH)
--BEGIN DISTRIBUTED TRAN
raiserror('--- Alim Z_CODESOURCE de Prod',0,1) WITH NOWAIT
SET @sqlZ = 'EXEC dbo.Z_CODESOURCE_Alim @NOM_OBJET = ''' + @PS + ''''
SET @LINK = N'EXEC (@sqlZ) AT ' + QUOTENAME(@LNK_Name);;
EXEC sp_executesql @LINK;
SET NOCOUNT OFF
IF EXISTS (SELECT TOP 1 1 FROM ADMIN_DEPLOY_BLOCK WHERE NOM_PS = @PS AND Nom_Schema = @SCH)
BEGIN
SELECT 'DEPLOIEMENT INTERDIT PAR ' + ACTEUR + '. RAISON: ' + RAISON
FROM ADMIN_DEPLOY_BLOCK
WHERE NOM_PS = @PS
AND Nom_Schema = @SCH;
PRINT 'Pas de déploiement !'
END
ELSE
BEGIN TRY
SET @sqlm = ' USE [' + @bdd + '];DELETE FROM METADATA WHERE NAME = '''+@PS+''''
SET @LINK = N'EXEC (@sqlm) AT ' + QUOTENAME(@LNK_Name);
EXEC sp_executesql @LINK ;
SET @sql1 = 'IF EXISTS (SELECT * FROM sys.objects WHERE type IN (''P'', ''FN'') AND name = '''+@PS+''' AND schema_id = ( select schema_id from sys.schemas WHERE name=''' + @SCH + ''' )) DROP PROCEDURE ' + @SCH + '.' + @PS
SET @sql1 = 'IF EXISTS (SELECT * FROM sys.objects WHERE type IN (''P'', ''FN'') AND name = '''+@PS+''') DROP PROCEDURE '+@PS
SET @sql1 = REPLACE(@sql1,'''','''''')
SET @sql1 = 'USE [' + @bdd + ']; EXEC(''' + @sql1 + ''')'
SET @LINK1 = N'EXEC (@sql1) AT ' + QUOTENAME(@LNK_Name) ;
EXEC sp_executesql @LINK1 ;
SET @sql = REPLACE(@sql,'''','''''')
SET @sql = 'USE [' + @bdd + ']; EXEC(''' + @sql + ''')'
SET @LINK2 = N'EXEC (@sql) AT ' + QUOTENAME(@LNK_Name) ;
EXEC sp_executesql @LINK2 ;
INSERT INTO LOG_DEPLOYPS (LOGIN, PS, DAT) values (@login, @PS, @datetime)
Print ''
Print ''
Print 'Déploiement effectuée avec succès'
--COMMIT TRAN
END TRY
BEGIN CATCH
Print ''
Print ''
Print 'Une erreur est survenue: ' + CAST(@@ERROR AS VARCHAR(255))
SELECT
@PS AS ProcedureName
,ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
--ROLLBACK TRAN
END CATCH
END |
Partager