2011-03-24 85 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

請提及您正在使用的DBMS。可以說,它是sql-server,然後標記。 – Nishant 2011-03-24 08:11:23

+1

NEWID()=> sql-server – RichardTheKiwi 2011-03-24 08:12:49

+0

以下答案之一是否解決了您的問題?如果是這樣,請標記爲答案,以便將來的其他人可以從您的問題中受益。謝謝。 – SnareChops 2013-01-20 19:33:51

回答

3


你可以做這樣的:
SQL 2000大成

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 2011-03-24 08:12:40

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 

(這裏的第二個參數是不必要的,因爲從對象的名稱很顯然,它只能是一個表)。