Логотип

Как конвертировать хранимые процедуры из MS SQL Server в MySQL

Как конвертировать хранимые процедуры из MS SQL Server в MySQL

При переходе из MS SQL в MySQL, кроме миграции данных, вы должны также перенести код приложения, который находится в базе данных.

Ранее мы обсуждали, как перенести MS SQL в базу данных MySQL с помощью инструмента WorkSQL Workbench.

В рамках миграции, он будет только конвертировать таблицы и копировать данные, но он не будет преобразовывать триггеры, представления и хранимые процедуры. Вы должны вручную преобразовать их в базе данных MySQL.

Для выполнения этого преобразования вручную, вы должны понимать основные различия между запросами MS SQL и MySQL.

Во время моего преобразования из Microsoft SQL Server в базу данных MySQL, я столкнулся со следующими операторами и запросами MS SQL, которые не были совместимы с MySQL, и я должен был преобразовать их, как показано ниже.

1. Создание хранимых процедур. Синтаксис

Основной синтаксис создания хранимых процедур отличается.

MS SQL Stored, синтаксис создания процедуры:

CREATE PROCEDURE [dbo].[storedProcedureName]
@someString VarChar(150)
As
BEGIN
  --  Sql queries goes here 
END

 

для MySQL синтаксис создания процедуры:

CREATE PROCEDURE storedProcedureName( IN someString VarChar(150) )
BEGIN
  -- Sql queries goes here
END

 

Читать  Вставка Данных в MySQL с помощью Perl

2. Создание временных таблиц

В коде MS SQL, я создал несколько временных таблиц, которые требуются для применения. Синтаксис для создания временной таблицы различается, как показано ниже.

MS SQL синтаксис создания временной таблицы:

CREATE TABLE #tableName( 
emp_id VARCHAR(10)COLLATE Database_Default PRIMARY KEY, 
emp_Name VARCHAR(50) COLLATE Database_Default, 
emp_Code VARCHAR(30) COLLATE Database_Default, 
emp_Department VARCHAR(30) COLLATE Database_Default
)

 

MySQL синтаксис создания временной таблицы:

CREATE TEMPORARY TABLE tableName(
emp_id VARCHAR(10),
emp_Name VARCHAR(50),
emp_Code VARCHAR(30),
emp_Department VARCHAR(30)
);

 

3. Синтаксис IF

Я использовал много условий в моих хранимых процедур и триггерах, которые не работали после преобразования в MySQL, поскольку синтаксис отличается, как показано ниже.

MS SQL условие IF Синтаксис:

if(@intSomeVal='')
BEGIN
 SET @intSomeVal=10
END

 

MySQL условие IF Синтаксис:

IF @intSomeVal=''	THEN
  SET @intSomeVal=10;
END IF;

 

4. Состояние IF EXIST

Другое общее использование, если условие, проверить, вернулся ли в запросе какие-либо строки или нет; и если он возвращает несколько строк, сделать что-то. Для этого я использовал IF EXISTS в MS SQL, который должен быть преобразован в MySQL команды IF, как описано ниже.

MS SQL IF EXITS Пример:

IF EXISTS(SELECT 1 FROM #tableName WITH(NOLOCK) WHERE ColName='empType' ) 
BEGIN
  --  Sql queries goes here
END

 

MySQL эквивалент выше, используя при выполнении условия:

IF(SELECT count(*) FROM tableName WHERE ColName='empType') > 0 	THEN
  --  Sql queries goes here
END IF;

 

Читать  Что такое RANGE Partitioning в MySQL

5. Функции даты

Использование функций данных внутри хранимой процедуры является довольно распространенным явлением. В следующей таблице приведены различия между MS SQL и MySQL данных, связанных функций.

MS SQL ServerMySQL Server
GETDATE( )NOW( )
SYSDATE( )
CURRENT_TIMESTAMP( )
GETDATE( ) + 1NOW( ) + INTERVAL 1 DAY
CURRENT_TIMESTAMP +INTERVAL 1 DAY
DATEADD(dd, -1, GETDATE())ADDDATE(NOW(), INTERVAL -1 DAY)
CONVERT(VARCHAR(19),GETDATE())DATE_FORMAT(NOW(),’%b %d %Y %h:%i %p’)
CONVERT(VARCHAR(10),GETDATE(),110)DATE_FORMAT(NOW(),’%m-%d-%Y’)
CONVERT(VARCHAR(24),GETDATE(),113)DATE_FORMAT(NOW(),’%d %b %Y %T:%f’)
CONVERT(VARCHAR(11),GETDATE(),6)DATE_FORMAT(NOW(),’%d %b %y’)

6. Объявление переменных

В MS SQL хранимые процедуры, вы можете объявлять переменные где-то между «Begin» и «end»

Однако в MySql вам придется объявить их только после заявления хранимой процедуры «begin». Декларация переменной в любой точке между не допускается.

7. Выберите первые N записей

В MS SQL, вы будете использовать SELECT, TOP, если вы хотите выбрать только первые несколько записей. Например, чтобы выбрать 1-ые 10 записей, вы сделаете следующее:

SELECT TOP 10 * FROM TABLE;

 

В MySQL, вам придется использовать LIMIT вместо TOP, как показано ниже.

SELECT * FROM TABLE LIMIT 10;

 

8. Преобразование целого числа в Char

В MS SQL вы выполните следующие действия (функции Convert), чтобы преобразовать целое число в символ.

CONVERT(VARCHAR(50), someIntVal)

 

В MySQL, вы будете использовать функцию CAST для преобразования целого на символ, как показано ниже.

CAST( someIntVal as CHAR)

 

Читать  Управление вашей таблицей wp_options

9. Оператор конкатенации

Если вы манипулируете множеством данных внутри хранимой процедуры, вы можете использовать выполнение некоторых конкатенации строк.

В MS SQL оператор конкатенации + символ. Пример такого использования показан ниже.

SET @someString = '%|' + @someStringVal + '|%'

 

В MySQL, если вы используете режим AnSi, то, он такой же, как и в MS SQL. т.е. + символ, будет работать для конкатенации.

Но, в режиме по умолчанию, в MySQL, мы должны использовать функцию CONCAT( “str1”, “str2”, “str3”.. “strN”).

SET someString = CONCAT('%|', someStringVal, '|%');

Редактор: AndreyEx

Рейтинг: 4.8 (4 голоса)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала