2016-12-16 100 views
0

我有從其他數據庫導出的sql函數代碼。但是當我運行它給出錯誤導出的Sql代碼在運行時給出錯誤

#1064-你的SQL語法錯誤;檢查對應於您MariaDB的服務器版本正確的語法在使用線附近'手動4

我的SQL代碼是

CREATE DEFINER=`root`@`localhost` FUNCTION `getCOGS`(pItemId BIGINT) RETURNS float 
    DETERMINISTIC 
BEGIN 
    declare vRet FLOAT; 
    SET vRet = 0.00; 
    SELECT SUM(d.quantity*d.unitPrice)/SUM(d.quantity) INTO vRet 
    FROM transaction_detail d 
    INNER JOIN transaction t ON (t.componentId = d.transactionId AND t.`type` = 'PURCHASE') 
    WHERE d.itemId = pItemId AND d.`type` = 1 AND d.accountId = 12; 
    RETURN vRet; 
END 
+0

[標籤:SQL服務器]是Microsoft的特定SQL數據庫產品。您的語法和錯誤消息都不會與該產品相關。我建議你[編輯]你的問題,並用正確的標籤重新標記 - 看起來是[標籤:mariadb] –

+0

@Damien_The_Unbeliever:它似乎是從mariaDB導出並詢問如何更改它,以便它可以在SQLServer上運行 – TheGameiswar

+0

@TheGameiswar - *錯誤消息*提到mariadb。所以這似乎是目標服務器。我無法與源服務器通信,但該腳本與SQL Server語法不匹配。所以目前,我不相信SQL Server是源或目的地。 –

回答

0

你必須改變的分隔符。 試試這個

DELIMITER | 

CREATE DEFINER=`root`@`localhost` FUNCTION `getCOGS`(pItemId BIGINT) RETURNS float 
    DETERMINISTIC 
BEGIN 
    declare vRet FLOAT; 
    SET vRet = 0.00; 
    SELECT SUM(d.quantity*d.unitPrice)/SUM(d.quantity) INTO vRet 
    FROM transaction_detail d 
    INNER JOIN transaction t ON (t.componentId = d.transactionId AND t.`type` = 'PURCHASE') 
    WHERE d.itemId = pItemId AND d.`type` = 1 AND d.accountId = 12; 
    RETURN vRet; 
END 
| 
DELIMITER ; 

分隔符聲明,這種變化是分號分隔符標準(;)到另一個(這裏|)。

查詢後,就可以將其設置回;

+0

@nishan問題解決了嗎? – jophab