2014-09-03 39 views
0

我想運行基本插入sql查詢。插入SQL查詢,缺少列和無效列名

這裏是insert sql。

Insert into tblABC(X1,X2,X3) 
Select X1,X2,X3 from tblXX 

問題是tblXX沒有X3列。

有時X3會在那裏,有時它會丟失。當列丟失時,按下默認值,如0

嘗試使用Case語句

CASE WHEN EXISTS (SELECT 1 From information_schema.Columns C 
Inner Join Sys.Objects O 
      On (O.Object_Id = Object_Id(N'tblXX') And O.Name = C.Table_Name) 
and C.Column_Name = 'X3') THEN X3 
       ELSE 0 
      END 

我得到X3列無效列名稱錯誤

+0

你怎麼推默認值到不存在的列? – 2014-09-03 14:37:21

+1

它必須是單獨的語句,您可以檢查列是否存在並根據結果執行適當的代碼。看到http://stackoverflow.com/questions/133031/how-to-check-if-column-exists-in-sql-server-table – InitK 2014-09-03 14:41:56

回答

4

你可以嘗試以下方法:

if (exists (select 1 from information_schema.columns where table_name = 'tblXX' and column_name = 'X3')) 
begin 
    Insert into tblABC(X1, X2, X3) 
     Select X1, X2, X3 
     from tblXX; 
end 
else 
begin 
    Insert into tblABC(X1, X2, X3) 
     Select X1, X2, 0 
     from tblXX; 
end; 

如果這不起作用(因爲if失敗),那麼您需要使用動態SQL。

一個重要的注意事項:如果您隨機添加和刪除表中的列,那麼您的應用程序設計似乎很差。我建議你通過修復系統的底層設計來解決這個問題,所以不需要這樣的努力。

+0

我希望這是簡單的,但感謝您的幫助。雖然這並沒有幫助我,但至少我知道現在我正朝着正確的方向前進。我想確保我沒有錯過任何東西。謝謝!! – user1810575 2014-09-03 15:03:53

+0

試圖改變設計,我使用的是Pivot的SQL並不那麼容易,但會給它一個鏡頭。 – user1810575 2014-09-03 15:04:39

0

我不確定你在找什麼,如果你只是想填寫表與表tblXX中沒有第三列值的數據,下面是使用默認值的查詢:

INSERT INTO tblABC(X1, X2, X3) 
SELECT T.X1 
    ,T.X2 
    ,0 
FROM tblXX T 

如果你只是想使用,如果不存在tblXX的默認值,查詢將如下所示:

INSERT INTO tblABC(X1, X2, X3) 
SELECT T.X1 
    ,T.X2 
    ,CASE 
     WHEN T.X3 IS NULL THEN 0 
     ELSE T.X3 
    END 
FROM tblXX T 

希望這會幫助你。

0

你可以做的是當你創建表時,你可以在第三列中放置一個默認值0,所以你不必使用if語句。然後,您可以指定要插入值的列,或者將值設爲null,以使其無值。

參閱本主題:

How to insert default values in SQL table?

希望它能幫助,