Azure SQL to Mysql
Azure SQL to Mysql
Linked Server
Within the migration, we only convert tables and copy data, but it will not convert triggers, views, and
stored procedures. we must manually convert them to a MySQL database.
Duration
Depends on database size i.e., number of tables, triggers, views, and stored procedures. Please see the
below three sample code which I wrote for one of mine clients in Upwork
Example 1
To write below code I took 30 mins.
declare @date varchar(10),
@sending_shop_number varchar(4) = 482,
@receiving_shop_numbers varchar(50),
@product_no varchar(4) = 809,
@Ssql nvarchar(3000)
set @date= '20220202'
print @date
production_header ph
on pd.shop_no = ph.shop_no and
pd.production_date = ph.production_date and
pd.production_no = ph.production_no
where
ph.shop_no in (' + @receiving_shop_numbers +') and
cast(ph.production_date as date) = '''+ @date +''' and
pd.product_no =' +''+ @product_no +''
----print @Ssql
----exec sp_executesql @Ssql
SELECT
'Transfers' Source_table,
ROW_NUMBER()
OVER(PARTITION BY CAST(transfer_date AS
date),th.sending_shop_no,th.receiving_shop_no,td.product_no,default_product_transfer_sequ
ence_no
ORDER BY default_product_transfer_sequence_no) seq,
CAST(transfer_date AS date) transfer_date,
th.sending_shop_no,
th.receiving_shop_no,
td.product_no,
default_product_transfer_sequence_no,
receiving_shop_processed_date,
td.quantity
FROM
[dbo].transfer_header AS th WITH (NOLOCK)
JOIN [dbo].transfer_detail AS td WITH (NOLOCK) ON
td.sending_shop_no = th.sending_shop_no AND
----(
----) ON [PRIMARY]
----GO
----SET ANSI_NULLS ON
----GO
----SET QUOTED_IDENTIFIER ON
----(
----) ON [PRIMARY]
----GO
----GO
----GO
----GO
----GO
----GO
----GO
----GO
----INSERT [dbo].[tblSecurityPrices] ([Trade_date], [SecurityID], [Price]) VALUES (CAST(N'2006-01-18' AS
Date), N'M2', CAST(13.27 AS Decimal(4, 2)))
----GO
-----------------QUERY 1
SELECT t2.PortfolioID,t2.Trade_date,
FROM
SELECT t1.PortfolioID,
---t1.SecurityID,
t1.Trade_date,
SUM(t1.X) X
FROM
SELECT a.PortfolioID,
a.Trade_date,
a.SecurityID,
a.Weight,
b.Price ,
FROM tblPortfolio a
a.Trade_date= b.Trade_date
)t1
GROUP BY t1.PortfolioID,
---t1.SecurityID,
t1.Trade_date
)t2
GROUP BY t2.PortfolioID,t2.Trade_date,t2.X
GO
-------------QUERY 2
SELECT t2.PortfolioID,t2.Trade_date,
t2.X,
FROM (
SELECT t1.PortfolioID,
---t1.SecurityID,
t1.Trade_date,
SUM(t1.X) X
FROM
SELECT a.PortfolioID,
a.Trade_date,
a.SecurityID,
a.Weight,
b.Price ,
FROM tblPortfolio a
a.Trade_date= b.Trade_date
)t1
GROUP BY t1.PortfolioID,
---t1.SecurityID,
t1.Trade_date
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@DBName nvarchar(100) ,
@DirPathDB nvarchar(100) ,
@DirPathClone nvarchar(100),
@NoofClones INT
AS
BEGIN
SET NOCOUNT ON
DECLARE
@FolderBackup nvarchar(100) ,
@FolderDatabase nvarchar(100),
@FolderCloneBackup nvarchar(100) ,
@FolderCloneDatabase nvarchar(100) ,
@BackupMaster nvarchar(200),
@BackupClone nvarchar(200),
@MaxNofDBClone tinyint,
@CloneDBName nvarchar(100),
@SqlClearCloneDB nvarchar(max),
@SqlCreateCloneDB nvarchar(max),
@ValdbSQl nvarchar(1000),
@MasterCopyDBName varchar(100),
@CreateMasterDBCopySQl nvarchar(4000),
@SqlStateFgroup nvarchar(max),
@MasterCopyNdf nvarchar(200),
@MasterCopyNdfGroup nvarchar(200) ,
@SqlMasterBup nvarchar(500),
@CloneCopyNdfGroup nvarchar(500),
@CloneCopyNdf nvarchar(200)
-- 2 - @DataPath values
SET @ValdbSQl = 'IF EXISTS(SELECT * FROM sys.databases WHERE name = '''+ @DBName +''' )
BEGIN
BACKUP DATABASE ' + @DBName +' TO DISK = '''+ @BackupMaster +'''WITH CHECKSUM;
END
'
---print @ValdbSQl
SET @CreateMasterDBCopySQl = ' IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = '''
+ @MasterCopyDBName +''' ) BEGIN
IF NOT EXISTS(
) BEGIN
ALTER DATABASE ' + @MasterCopyDBName +' ADD FILEGROUP [' + @MasterCopyNdfGroup +']
ALTER DATABASE ' + @MasterCopyDBName +' ADD FILE ( NAME = N''' + @MasterCopyDBName +''',
FILENAME = N'''+ @MasterCopyNdf +''' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [' +
@MasterCopyNdfGroup +']
END
END
'
---print @CreateMasterDBCopySQl
SET @SqlMasterBup = 'BACKUP DATABASE ' + @MasterCopyDBName +' TO DISK = '''+ @BackupClone
+'''WITH CHECKSUM;'
EXEC (@SqlMasterBup)
SET @SqlClearCloneDB =
BEGIN
ALTER DATABASE ' + @CloneDBSeqName +' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
END'
SET @SqlCreateCloneDB =
'
END'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@pBackupFile NVARCHAR(550),
@pDatabaseName sysname,
@PDataPath NVARCHAR(550)
AS
BEGIN
BEGIN TRY
BEGIN
[LogicalName] NVARCHAR(128) ,
[PhysicalName] NVARCHAR(260) ,
[Type] NCHAR(1) ,
[FileGroupName] NVARCHAR(128) ,
[Size] BIGINT ,
[MaxSize] BIGINT ,
[FileId] BIGINT ,
[CreateLSN] DECIMAL(25, 0) ,
[DropLSN] DECIMAL(25, 0) ,
[UniqueId] UNIQUEIDENTIFIER ,
[ReadOnlyLSN] DECIMAL(25, 0) ,
[ReadWriteLSN] DECIMAL(25, 0) ,
[BackupSizeInBytes] BIGINT ,
[SourceBlockSize] INT ,
[FileGroupId] INT ,
[LogGroupGUID] UNIQUEIDENTIFIER ,
[DifferentialBaseLSN] DECIMAL(25, 0) ,
[DifferentialBaseGUID] UNIQUEIDENTIFIER ,
[IsReadOnly] BIT ,
[IsPresent] BIT ,
[TDEThumbprint] VARBINARY(20) ,
[SnapshotUrl] NVARCHAR(336)
);
END
ELSE
BEGIN
RAISERROR ('SnapshotUrl is Only Avialble for SQL Server 2016 and Above. Modify the Definition of
Table Variable and Remove SnapShotURL.', -- Message text.
16, -- Severity.
1 -- State.
);
END
SELECT @pDSQL = ' RESTORE FILELISTONLY FROM DISK = ''' + @pBackupFile + '''';
SELECT @pDSQL;
INSERT @FileLists
EXEC(@pDSQL);
SELECT @pLogicalDataFileName = LogicalName
FROM @FileLists
FROM @FileLists
FROM @FileLists
SELECT @pDataFileLocation ,
@pLogFileLocation ,
@pDatabaseName;
print @pDSQL;
exec SP_Executesql @pDSQL ;
END TRY
BEGIN CATCH
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage
END CATCH
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@pBackupFile NVARCHAR(550),
@pDatabaseName sysname,
@PDataPath NVARCHAR(550)
AS
BEGIN
BEGIN TRY
BEGIN
[LogicalName] NVARCHAR(128) ,
[PhysicalName] NVARCHAR(260) ,
[Type] NCHAR(1) ,
[FileGroupName] NVARCHAR(128) ,
[Size] BIGINT ,
[MaxSize] BIGINT ,
[FileId] BIGINT ,
[CreateLSN] DECIMAL(25, 0) ,
[DropLSN] DECIMAL(25, 0) ,
[UniqueId] UNIQUEIDENTIFIER ,
[ReadOnlyLSN] DECIMAL(25, 0) ,
[ReadWriteLSN] DECIMAL(25, 0) ,
[BackupSizeInBytes] BIGINT ,
[SourceBlockSize] INT ,
[FileGroupId] INT ,
[LogGroupGUID] UNIQUEIDENTIFIER ,
[DifferentialBaseLSN] DECIMAL(25, 0) ,
[DifferentialBaseGUID] UNIQUEIDENTIFIER ,
[IsReadOnly] BIT ,
[IsPresent] BIT ,
[TDEThumbprint] VARBINARY(20) ,
[SnapshotUrl] NVARCHAR(336)
);
END
ELSE
BEGIN
RAISERROR ('SnapshotUrl is Only Avialble for SQL Server 2016 and Above. Modify the Definition of
Table Variable and Remove SnapShotURL.', -- Message text.
16, -- Severity.
1 -- State.
);
END
SELECT @pDSQL = ' RESTORE FILELISTONLY FROM DISK = ''' + @pBackupFile + '''';
SELECT @pDSQL;
INSERT @FileLists
EXEC(@pDSQL);
FROM @FileLists
FROM @FileLists
SELECT @pDataFileLocation ,
@pLogFileLocation ,
@pDatabaseName;
WITH MOVE ''' + @pLogicalDataFileName + ''' TO ''' + @pDataFileName + ''', MOVE ''' +
@pLogicalLogFileName + ''' TO '''
+ @pLogFileName + '''';
print @pDSQL;
END TRY
BEGIN CATCH
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage
END CATCH
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@DBName nvarchar(100) ,
@DirPathDB nvarchar(100) ,
@DirPathClone nvarchar(100),
@NoofClones CHAR(2)
AS
BEGIN
SET @sSQL = 'IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = '''+ @DBName +''' )
BEGIN
END
ELSE
BEGIN
EXEC [dbo].[UspCloneDB] '''+ @DBName +''', ''' + @DirPathDB+''', ''' + @DirPathClone+''', ''' +
@NoofClones +'''
END'
EXECUTE ( @sSQL)
END
GO