2016-05-18 4 views
0

Мне нужно проверить, нет ли в таблице mytablemycolumn? Вот мой запрос:Как проверить, существует ли столбец в таблице?

SELECT CASE WHEN EXISTS (SHOW COLUMNS FROM mytable LIKE mycolumn) THEN 1 ELSE 0 END; 

Но он не работает и выдает эту ошибку-сообщение:

# 1064 - У вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать возле «SHOW COLUMNS FROM туЬаЫх LIKE MyColumn) THEN 1 ELSE 0 END в строке 1

Что случилось и как я могу это исправить?

+1

см это 'HTTP: ///stackoverflow.com а/24194492/2845151' –

+0

Я удаляемый мой комментарий ... –

+2

Странно, вы думаете, что нужно, чтобы проверить это с помощью запроса SQL. Вы должны знать, какие столбцы находятся в ваших таблицах. –

ответ

4

Вы можете использовать следующие как если

IF EXISTS(
    select * from 
    INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME ='SOMETABLE' AND 
    COLUMN_NAME = 'SOMECOLUMN') 
) 
BEGIN 
    -- do stuff 
END 
GO 

В качестве альтернативы в случае

SELECT CASE WHEN EXISTS(
    select * from 
    INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME ='TABLE_NAME' AND 
    COLUMN_NAME = 'COLUMN_NAME') 
Then 1 Else 0 End; 
3

Попробуйте вместо

SELECT CASE WHEN EXISTS (
    SELECT * FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = 'db_name' 
    AND TABLE_NAME = 'table_name' 
    AND COLUMN_NAME = 'column_name') 
then 1 
else 0 
end; 
1

Если вам нужно передать имя таблицы и столбца динамически, пожалуйста, используйте это.

DECLARE @Table Varchar(100) 
DECLARE @Column Varchar(100) 
DECLARE @Query nvarchar(max) 

SET @Table ='MyTable' 
SET @Column ='MyColumn' 


SET @Query ='select * from 
    INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME ='''[email protected]+''' AND 
    COLUMN_NAME IN ('''[email protected]+''')' 

EXEC (@Query) 
+0

Я действительно не хочу делать это ':-)' .. Thx anyway +1 – Shafizadeh

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