SQL Server 스토어드 프로시저를 MySQL(MariaDB)로 다시 쓰기
MS SQL Server 구문을 MariaDB standart의 MySQL로 저장 프로시저를 다시 작성해야 합니다.난 몇 시간 동안 이것과 씨름하고 있다.이렇게 많은 차이가 있을 줄은 상상도 못했어요.자동으로 할 수 있는 툴이 있나요?다음은 저장 프로시저의 코드입니다.
CREATE PROCEDURE sp_Validate @username nvarchar(50), @email nvarchar(100) = NULL
AS
BEGIN
SELECT * INTO #tmp FROM Users WHERE Username = @username
IF((SELECT COUNT(*) FROM #tmp) < 1)
BEGIN
INSERT INTO Users(Username, Email, FirstLaunch) VALUES (@username, @email, GETDATE())
SELECT 1
END
ELSE IF(DATEDIFF(DAY, GETDATE(), (SELECT FirstLaunch FROM #tmp)) > 8)
BEGIN
UPDATE Users SET Email = @email WHERE Username = @username
SELECT 0
END
ELSE
BEGIN
UPDATE Users SET Email = @email WHERE Username = @username
SELECT 1
END
IF OBJECT_ID('#tmp') IS NOT NULL
DROP TABLE #tmp
END
사용자가 [Users]테이블 내에 존재하는지, 사용자가 처음 로그인한 지 7일이 넘었는지 확인합니다.
저장 프로시저 언어의 구현은 서로 다릅니다.MS SQL Server 언어(Transact-SQL)는 원래 Sybase에 의해 개발되었습니다.MySQL 사투리가 좀 달라요.고객의 구속은 아니고, 시간이 지남에 따라 진화해 왔습니다.
MySQL에서 이 절차를 구현하려면 다음을 사용할 수 있습니다.
CREATE PROCEDURE sp_Validate(
in_username varchar(50),
in_email varchar(100)
)
begin
declare v_cnt int;
declare v_first_launch datetime;
select 1, FirstLaunch into v_cnt, v_first_launch
from Users
where Username = in_username;
if (v_cnt = 1) then
update Users
set Email = in_email
where Username = in_username;
if (datediff(now(), v_first_launch) > 8) then
select 0;
else
select 1;
end if;
else
insert into Users(Username, Email, FirstLaunch)
values (in_username, in_email, now());
select 1;
end if;
end
언급URL : https://stackoverflow.com/questions/51819953/rewrite-sql-server-stored-procedure-to-mysqlmariadb
'programing' 카테고리의 다른 글
태그 또는 설명별 WooCommerce 제품 검색 게시물 조회 (0) | 2023.02.07 |
---|---|
Asp.net WEBAPI에서 JSON 문자열을 명시적으로 반환하시겠습니까? (0) | 2023.02.07 |
Java 'localhost:10.0'을 DISPLAY 변수 값으로 사용하여 X11 창 서버에 연결할 수 없습니다. (0) | 2023.01.30 |
소수점 2자리까지 부동을 표시하는 JavaScript (0) | 2023.01.30 |
Python에서 dict 객체의 결합 (0) | 2023.01.30 |