2017-04-19 42 views
-1

我從SQL Server版本稍微修改了以下代碼。我需要幫助將其轉換爲MySQL。目前,我收到錯誤消息:「您的SQL語法錯誤;請在第1行的DECLARE @first_n附近檢查與您的MySQL服務器相對應的手冊」。將SQL Server代碼轉換爲MySQL的問題

DECLARE 
@out_desc AS VARCHAR(1000), 
@out_mesg AS VARCHAR(100) 

DECLARE @first_name AS VARCHAR(50), 
@email AS NVARCHAR(50), 
@body AS NVARCHAR(200) 

DECLARE @birth_date AS DATETIME 

DECLARE C1 CURSOR READ_ONLY 
FOR 
SELECT first_name, birth_date, email 
FROM emp_master 

OPEN C1 
FETCH NEXT FROM C1 INTO 
@first_name, @birth_date, @email 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    IF DATEPART(DAY,@birth_date) = DATEPART(DAY,GETDATE()) 
    AND DATEPART(MONTH,@birth_date) = DATEPART(MONTH,GETDATE()) 
    BEGIN 
    SET @body = '<b>Happy Birthday ' + @first_name + 
    '</b><br />Many happy returns of the day' 
    + '<br /><br />Customer Relationship Department' 
    EXEC sp_send_mail 
    '[email protected]', 
    @email, 
    'Birthday Wishes', 
    @body, 
    'htmlbody', 
    @output_mesg = @out_mesg output, 
    @output_desc = @out_desc output 

    PRINT @out_mesg 
    PRINT @out_desc 
    END 
    FETCH NEXT FROM C1 INTO 
    @name, @birthdate, @email 
END 
CLOSE C1 
DEALLOCATE C1 
+0

請讓我知道這件事情,我沒有得到解決了這個,感謝 –

+0

普萊斯e不要使用'[oracle]'標籤來查詢關於MySQL的問題。它們是兩種不同的數據庫產品。在StackOverflow上提出問題時,Oracle公司現在擁​​有MySQL的事實並不重要。 – APC

+2

這是Ms Sql Server的語法和功能。不是mysql! –

回答

1

既然你要去MySQL,你需要爲每個語句的終結者。這通常是一個分號。因此,例如,你的第一個語句將變爲:

DECLARE 
@out_desc AS VARCHAR(1000), 
@out_mesg AS VARCHAR(100); 
#------ look here -------^ 

而且,當你的代碼的其他方面可能被罰款(我沒有檢查,並且很少使用遊標),這將是有意義的過濾插入什麼入遊標,而不是有while循環

IF DATEPART(DAY,@birth_date) = DATEPART(DAY,GETDATE()) 
AND DATEPART(MONTH,@birth_date) = DATEPART(MONTH,GETDATE()) 

內的下列條件雖然有相似之處,一些SQL-Server代碼是MySQL的完全不同。特別是,我不認爲sp_send_mail是有效的,我不認爲MySQL「等價」是完全相同的。

我無法提供進一步的幫助,將其從sql-server語法翻譯成MySQL。您需要逐行瀏覽您的代碼,並搜索任何無法使用的位的MySQL等價物。一次添加一個部分,看看代碼是否會正常運行。當你遇到錯誤時,運行谷歌搜索「MySQL相當於SQL-server X」,其中X是任何不起作用的東西。

另外,萬一它可能在您不太期待的情況下發送電子郵件,請不要使用預期的收件人電子郵件地址,直到您確信所有錯誤已被解決。硬編碼到您自己的電子郵件地址(在選擇進入CURSOR,所以你可以看到WHILE循環內的相關部分工作。

+0

我想通過發送電子郵件給公司的員工通過他們的生日祝福,但在MySQL中我沒有得到任何方法發送電子郵件,所以我來這個解決方案 –

+0

如果我在最後添加分號(;)的聲明再次我越來越多的錯誤 –

+0

兩天我堅持這一點,請給我一個解決方案 –

0

您可能需要糾正這種

 FETCH NEXT FROM C1 INTO 
    @name, @birthdate, @email 

FETCH NEXT FROM C1 INTO 
    @first_name, @birth_date, @email 

@name,@birthdate不聲明

+0

我更換了變量,然後還錯誤沒有解決 –

+0

由兩天我卡在這請給我解決方案 –

+0

我沒有得到任何語法錯誤後,我修改了變量名稱。然而,如果不符合聲明條件,結果將不會出現。 – Kapil