Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Хочу проверить есть ли такой столбец  [new]
NEKOS
Member

Откуда:
Сообщений: 194
Server version: 5.0.22

Имею такой запрос

if not exists (select * from  information_schema.columns
where table_name = 'test' and column_name = 'dta')
begin
 alter table test add dta bigint not null default 0;
end;


не работаєт, получаю ошыбку
[ip] ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end' at line 1

Подскажыте в чьом туплю
31 июл 08, 15:42    [6011245]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
miksoft
Member

Откуда:
Сообщений: 38773
какой же это запрос?
в каком окружении он выполняется? это кусок процедуры или еще что-то?
31 июл 08, 15:56    [6011352]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
C#C++ (забанен)
Guest
Может, так?
if not exists (select * from  information_schema.columns
where table_name = 'test' and column_name = 'dta') 
then
   alter table test add dta bigint not null default 0;
end if;
31 июл 08, 16:05    [6011411]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
NEKOS
Member

Откуда:
Сообщений: 194
miksoft
какой же это запрос?
в каком окружении он выполняется? это кусок процедуры или еще что-то?


Выполняю на клиенте в окне SQL, так же как и обычный селект селект.
Например в MSSQL ето срабатывает, и мне такое нада в MySQL. Нужно создать колонку но перед созданием проверить есть ли она в таблице

C#C++ (забанен)
Может, так?
if not exists (select * from  information_schema.columns
where table_name = 'test' and column_name = 'dta') 
then
   alter table test add dta bigint not null default 0;
end if;


[ip] ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end if' at line 1




Или в MySQL так нельзя?
31 июл 08, 19:15    [6012626]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
cyberklin
Member

Откуда:
Сообщений: 8
мне кажется, в mysql такое не реализовать.

два варианта:

1. либо в два запроса - SHOW COLUMNS + ALTER если нет столбца
2. делать ALTER и смотреть код ошибки, если она будет.
31 июл 08, 19:26    [6012651]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
miksoft
Member

Откуда:
Сообщений: 38773
а так?
begin
if not exists (select * from  information_schema.columns
where table_name = 'test' and column_name = 'dta')
begin
 alter table test add dta bigint not null default 0;
end;
end;
31 июл 08, 20:09    [6012738]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
NEKOS
Member

Откуда:
Сообщений: 194
miksoft
а так?
begin
if not exists (select * from  information_schema.columns
where table_name = 'test' and column_name = 'dta')
begin
 alter table test add dta bigint not null default 0;
end;
end;



Client MySQL Control Center 0.9.4

[ip] ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end' at line 1

and

phpMyAdmin - 2.10.0.2

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if not exists (select * from information_schema.columns
where table_name = 'te' at line 2
31 июл 08, 20:29    [6012782]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
miksoft
Member

Откуда:
Сообщений: 38773
а так?
if not exists (select * from  information_schema.columns where table_name = 'test' and column_name = 'dta')
then
 alter table test add dta bigint not null default 0;
end if;

P.S. (ворчливо) ну вот, заставили в документацию лезть... :)
31 июл 08, 20:39    [6012800]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
C#C++ (забанен)
Guest
miksoft
а так?
if not exists (select * from  information_schema.columns where table_name = 'test' and column_name = 'dta')
then
 alter table test add dta bigint not null default 0;
end if;

P.S. (ворчливо) ну вот, заставили в документацию лезть... :)

Уже было
31 июл 08, 21:07    [6012858]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
C#C++ (забанен)
Guest
У меня подозрение, что автор забыл поменять разделитель с ";" на "//", например...
31 июл 08, 21:11    [6012864]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
miksoft
Member

Откуда:
Сообщений: 38773
C#C++ (забанен)
miksoft
а так?
if not exists (select * from  information_schema.columns where table_name = 'test' and column_name = 'dta')
then
 alter table test add dta bigint not null default 0;
end if;

P.S. (ворчливо) ну вот, заставили в документацию лезть... :)

Уже было
Да, что-то я совсем плох стал...
31 июл 08, 22:17    [6013015]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
miksoft
Member

Откуда:
Сообщений: 38773
C#C++ (забанен)
У меня подозрение, что автор забыл поменять разделитель с ";" на "//", например...
а зачем? автор же не процедуру создает, он просто выполнить хочет.
31 июл 08, 22:19    [6013017]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
NEKOS
Member

Откуда:
Сообщений: 194
miksoft
C#C++ (забанен)
У меня подозрение, что автор забыл поменять разделитель с ";" на "//", например...
а зачем? автор же не процедуру создает, он просто выполнить хочет.


именно так, :( ну как уже есть, обойдусь тогда без проверки.
1 авг 08, 11:09    [6014518]     Ответить | Цитировать Сообщить модератору
 Re: Хочу проверить есть ли такой столбец  [new]
NEKOS
Member

Откуда:
Сообщений: 194
Решил задачу с помощю процедуры, может кому пригодится.

DROP PROCEDURE IF EXISTS `temp_proc`;
CREATE PROCEDURE `temp_proc`()
BEGIN

 if (not exists (select * from  information_schema.columns
 where table_name = 'topic' and column_name = 'sortorder'))
 then	
 alter table topic add sortorder bigint not null default 0;
 END IF;

END;

CALL `temp_proc`();
DROP PROCEDURE IF EXISTS `temp_proc`;
5 авг 08, 11:12    [6027361]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить