-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathZzz_Deploy.sql
57 lines (50 loc) · 1.73 KB
/
Zzz_Deploy.sql
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
-- =============================================
-- Author: Mohsen Mirshahreza
-- Create date: 2023-05-11
-- Description: To fetch and deploy scripts from a repository
-- =============================================
SP_CONFIGURE 'show advanced options', 1;
GO
RECONFIGURE;
GO
SP_CONFIGURE 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
CREATE OR ALTER PROCEDURE [DBO].[Zzz_Deploy] @PackageName VARCHAR(512)=NULL
AS
BEGIN
DECLARE @rr INT,@rv NVARCHAR(4000);
DECLARE @BaseURL NVARCHAR(4000) = N'https://raw.githubusercontent.com/mirshahreza/RDBMS-PackageManager/master/MsSql/Packages/';
DECLARE @PackageFullURL NVARCHAR(4000) = @BaseURL + ISNULL(@PackageName,'');
IF(@PackageFullURL NOT LIKE N'%.sql') SET @PackageFullURL = @PackageFullURL + '/.sql'
DECLARE @status INT;
DECLARE @responseText AS TABLE(responseText NVARCHAR(MAX));
DECLARE @res AS INT;
EXEC SP_OACREATE 'MSXML2.ServerXMLHTTP', @res OUT;
EXEC SP_OAMETHOD @res, 'open', NULL, 'GET',@PackageFullURL,'false';
EXEC SP_OAMETHOD @res, 'send';
EXEC SP_OAGETPROPERTY @res, 'status', @status OUT;
INSERT INTO @ResponseText (ResponseText) EXEC SP_OAGETPROPERTY @res, 'responseText';
EXEC SP_OADESTROY @res;
SELECT @rr=@status,@rv=responseText FROM @responseText;
IF(@rr=200)
BEGIN
PRINT @PackageName + ' fetched successful.'
SET @rv = LTRIM(RTRIM(@rv));
IF(CHARINDEX('/*', @rv)=1)
BEGIN
DECLARE @deps NVARCHAR(4000);
SET @deps = LTRIM(RTRIM(SUBSTRING(@rv, 3, CHARINDEX('*/', @rv)-3)));
EXECUTE SP_EXECUTESQL @deps;
END
EXECUTE SP_EXECUTESQL @rv;
PRINT @PackageName + ' executed successful.';
END
ELSE
BEGIN
PRINT @PackageFullURL + ' fetch problem.'
PRINT 'Status Code : ' + CAST(@rr AS NVARCHAR);
PRINT 'Problem details : ' + @rv;
END
END