2012-12-01 95 views
0

我是新来的sql和我的大部分培训是在MSSQL,但我正在MYSQL的课。我有一个存储过程给我一个问题。我将分隔符设置为//。存储过程问题

CREATE PROCEDURE AddComment 
(
    name varchar(50), 
    emailAddress varchar(50), 
    Comments text 
) 
BEGIN 
DECLARE ComName varchar(50); 
DECLARE ComID int; 


SELECT name into ComName; 

SELECT ID into ComID from Commenters WHERE names = ComName; 

if ComID = NULL 
    BEGIN 
     INSERT INTO COMMENTERS ('names', 'emailAddresses') values (name, emailAddress); 
     SELECT ID into ComID from Commenters WHERE names = ComName; 
    END 

    INSERT INTO COMMENTS ('commentersID', 'Comments') values (ComID, Comments); 

END; 
// 

编辑

这是我现在有:

CREATE PROCEDURE AddComment 
(
    Username varchar(50), 
    UseremailAddress varchar(50), 
    UserComment text 
) 
BEGIN 
DECLARE ComName varchar(50); 
DECLARE ComID int; 


SELECT Username into ComName; 

SELECT ID into ComID from Commenters WHERE names = ComName; 

if ComID = NULL 
    BEGIN 
     INSERT INTO COMMENTERS(names,emailAddresses) values (Username, UseremailAddress); 
     SELECT ID into ComID from Commenters WHERE names = ComName; 
    END 

    INSERT INTO COMMENTS(commentersID, Comments) values (ComID, UserComment); 


END; 
// 

而且我得到的错误是:

ERROR 1064(42000):你有一个错误的SQL语法;检查对应于你的MySQL服务器版本使用附近的正确语法手册“BEGIN INSERT INT Ø评议人(姓名,emailAddresses)值(用户名,USEREMAIL”在行1个

什么想法?

+0

那是什么你得到 – GreyBeardedGeek

+0

我通过学校从命令行运行错误:?这是错误正在打印出来。你的SQL语法有错误;检查对应于您的MySQL服务器版本的手册,以找到正确的语法以在'BEGIN INSE RT INTO COMMENTERS('names','emailAddresses')值(第2行的名称,emailAddres)附近使用 –

+0

尝试将引号从列名,即INSERT INTO COMMENTERS(名称,emailAddresses)值(名称,emailAddresses);为了避免混淆,您可能想要为列名命名参数,例如'name'参数为'p_name'.. – GreyBeardedGeek

回答

0

你在你插入语句颠倒编码列名和值

应该

INSERT INTO COMMENTERS (name, emailAddress) values ('names', 'emailAddresses') ; 
+0

我之前假设列已经超过了参数。 IE ... INSERT INTO _tablename_(_columns_)values(_parameter_);那是错的吗? –

+0

@ColeMietzner不,你是对的,但那不是你编码的东西。列名不应该**有引号,值**应该有引号(或者是proc的变量) – Bohemian