2015-02-20 3 views
0

У меня возникла проблема с этим кодом sql.хранимая процедура со счетом (*) и если заявление

У меня есть стол friends с тремя колонками user1, user2, pending.

user1 и user2 являются первичными ключами типа данных int.

The phpmyadmin возвращает эту ошибку:

MySQL сказал: # 1064 - у Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса, используемого рядом с 'Declare var int; Набор вар = SELECT COUNT (*) FROM друзей WHERE ((user1 = id1 A»в строке 1

примечание - я сделал это через phphmyadmin так что я должен Это мой код:

Declare var int; 
Set var = SELECT COUNT(*) FROM friends WHERE ((user1 = id1 AND user2=id2) OR (user1 = id2 AND user2=id1)); 
IF var = 0         
BEGIN 
    INSERT INTO friends 
       (user1, user2,pending) 
     VALUES (id1, id2,1); 
    Print 'Data now added.'; 
END 
ELSE 
BEGIN 
    Print 'Dah! already exists'; 
END 
+0

Вы, кажется, смешиваете синтаксис SQL Server и MySQL. – gvee

+0

@gvee Я удалил тег sql-server, поскольку ошибка связана с MySQL, но согласитесь, что это выглядит как sql-server proc. benddror, пожалуйста, уточните. – Tanner

+0

im работает с phpmyadmin означает MySql, если это то, что вы объясняете, уточняя. – benddror

ответ

2

Попробуйте инвертировать эти 2 строки:

... 
declare @var int 
AS 
... 

следующим образом:

... 
AS 
declare @var int 
... 
+0

спасибо за ваш ответ, но он по-прежнему дает мне ту же ошибку – benddror

+0

Как упоминалось gvee и Tanner в комментариях к вашему вопросу, кажется, что вы пытаясь использовать синтаксис MSSQL в MySQL. С моим ответом ваша процедура успешно компилируется в MSSQL. Так что, наверное, есть кое-какие недоразумения. – Rubik

+0

Итак, кто-нибудь может понравиться мне написать, как это было написано в синтаксисе MySql – benddror

0

1) Все (в том числе деклараций) мну t в блоке BEGIN ... END.

2) Вам не нужно (и не может) объявить @session_veriables, только local_variables.

3) Отсутствующие параметры. Они должны быть объявлены между скобками: proc_name(p1 INT, p2 INT)

4) Все заявления должны заканчиваться ;

5) Вся процедура должна быть завернуты внутрь:

DELIMITER || 
... 
|| 
DELIMITER ; 

, если вы отправить его через PhpMyAdmin.

+0

Спасибо за ваш ответ, я сделал эври, что вы сказали, и немного поработал в google, но не нашел, почему он все еще не работает, я обновил мой код до нового, также я сделал это через phpmyadmin ... – benddror

+0

1 Ли phpmyadmin автоматически кодирует код в BEGIN ... END? 2 Некоторые; все еще отсутствуют. 3 Подзапрос в инструкции SET должен быть заключен в paranthesis: SET var = (...); –

+0

Кроме того, нет функции печати. Используйте SELECT 'Да! уже существует'; –

Смежные вопросы