2011-03-24 3 views
0

У меня есть запрос, как показано ниже:Проверьте, если таблица существует SQL

INSERT INTO CarnetMaster.GlassLookupCapacitySpecs 
(ID, CODE, NVIC, RELEASE, DISCON, DRV, TORQUE, KW, BORESTROKE, VINNUMBER, WIDTH, WHEELBASE, SEATS, COMPRATIO, TOWCAP, STEER, 
TURNCIR, HEIGHT, LENGTH, VWIDTH, KERBWT, PAYLOAD, GCM, GVM) 

SELECT NEWID(), CODE, NVIC, RELEASE, DISCON, DRV, TORQUE, KW, [BORE-STROKE], [VIN NUMBER], WIDTH, WHEELBASE, SEA, [TS COMPRAT], [IO TOWC], 
[AP STE], [ER TURNC], [IR HEIG], [HT LENG], [TH VWID], [TH KERB], [WT PAYLO], [AD GCM], GV 
FROM CVG86_SPE 

Как я могу проверить, если таблица существует, то выберите из таблицы CVG86_SPE и вставить? Если таблица не существует, она ничего не должна делать.

+1

, пожалуйста, укажите СУБД, которые вы используете. Допустим, это sql-сервер, а затем тег. – Nishant

+1

NEWID() => sql-server – RichardTheKiwi

+0

Один из нижеприведенных ответов решает ваш вопрос? Если так, пожалуйста, пометьте-как-ответ, чтобы другие в будущем могли воспользоваться вашим вопросом. Благодарю. – SnareChops

ответ

3


вы можете сделать это следующим образом:
SQL 2000 syntaxis

IF EXISTS (SELECT 1 FROM sysobjects WHERE xtype='u' AND name='CVG86_SPE') 
BEGIN 
      INSERT INTO CarnetMaster.GlassLookupCapacitySpecs 
    (ID, CODE, NVIC, RELEASE, DISCON, DRV, TORQUE, KW, BORESTROKE, VINNUMBER, WIDTH, WHEELBASE, SEATS, COMPRATIO, TOWCAP, STEER, 
    TURNCIR, HEIGHT, LENGTH, VWIDTH, KERBWT, PAYLOAD, GCM, GVM) 

    SELECT NEWID(), CODE, NVIC, RELEASE, DISCON, DRV, TORQUE, KW, [BORE-STROKE], [VIN NUMBER], WIDTH, WHEELBASE, SEA, [TS COMPRAT], [IO TOWC], 
    [AP STE], [ER TURNC], [IR HEIG], [HT LENG], [TH VWID], [TH KERB], [WT PAYLO], [AD GCM], GV 
    FROM CVG86_SPE 
END 

SQL 2005 и позже:

 IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME = 'CVG86_SPE') 
BEGIN 
INSERT INTO CarnetMaster.GlassLookupCapacitySpecs 
     (ID, CODE, NVIC, RELEASE, DISCON, DRV, TORQUE, KW, BORESTROKE, VINNUMBER, WIDTH, WHEELBASE, SEATS, COMPRATIO, TOWCAP, STEER, 
     TURNCIR, HEIGHT, LENGTH, VWIDTH, KERBWT, PAYLOAD, GCM, GVM) 

     SELECT NEWID(), CODE, NVIC, RELEASE, DISCON, DRV, TORQUE, KW, [BORE-STROKE], [VIN NUMBER], WIDTH, WHEELBASE, SEA, [TS COMPRAT], [IO TOWC], 
     [AP STE], [ER TURNC], [IR HEIG], [HT LENG], [TH VWID], [TH KERB], [WT PAYLO], [AD GCM], GV 
     FROM CVG86_SPE 
END 
+1

Почему это не удастся, я запустил его в своей тестовой базе данных и отлично работает? – IordanTanev

1

Другой способ сделать то же самое в SQL Server будет использовать функция OBJECT_ID():

IF OBJECT_ID('table name', 'U') IS NOT NULL BEGIN 
    INSERT ... 
    ... 
END 

Второй параметр указывает функции выполнять поиск именно для таблицы, а не для произвольного объекта, например, хранимой процедуры или пользовательской функции.

Если проверка на наличие временной таблицы, использовать его как это:

IF OBJECT_ID('tempdb..#tmp table name') IS NOT NULL BEGIN 
    INSERT ... 
    ... 
END 

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

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