2016-12-16 104 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