2014-06-17 53 views
0

我有兩個表:表A和表B如何在其他人不能爲空時填充表格的一列?

表A和表B有一個共同的列:CustomerIDTable A已填充,而Table B爲空。

Table B另一列PhoneNo不能爲空。所以,我想通過Table A複製相同的數據填充第一的Table BCustomerID列,然後添加其他值,第二列PhoneNoPhoneNo不能爲null)

問題是我做這個(內部時,存儲過程):

INSERT INTO Table B (CustomerID, PhoneNo) 
     VALUES ((SELECT TableA.CustomerID FROM TableA JOIN TableB 
ON TableA.CustomerID = TableB.CustomerID), @PhoneNo) 

當我嘗試執行,這給了我一個錯誤說

Subquery returned more than 1 value. This is not permitted when the subquery 
follows =, !=, <, <= , >, >= or when the subquery is used as an expression 

我怎麼能先填充ONLY CustomerIDTableB然後在以後將值添加到PhoneNO列?

+0

您可以添加一個空字符串''''(或任何值)並稍後更新。見@帕特里克的答案。 –

+0

你在撒謊,表B不是空的。 –

回答

2

我重寫了您的查詢並進行了相當多的更改。

insert有兩列,select現在提供兩個。 join已過時,因此已被刪除。 values的使用不正確,現在直接使用select

INSERT 
INTO Table B 
(CustomerID 
, PhoneNo 
) 
SELECT CustomerID 
,  @PhoneNo 
FROM TableA 
+0

當我嘗試這樣做時,如果我在CustomerID列中有6個條目,它會將我爲@PhoneNo輸入的值(假設爲1234567)添加到所有6條記錄中,並且我不希望那 – Lenonor

+0

我只想填充CustomerID然後添加新的值到PhoneNo ..我明白了..謝謝反正 – Lenonor

+0

你不能這樣做。它必須有價值。 –

1

請插入一個沒有價值觀是這樣的:

INSERT INTO Table B (CustomerID, PhoneNo) 
    SELECT TableA.CustomerID, @PhoneNo FROM TableA 
0

你不能沒有一個電話號碼記錄插入表B中。這正是NOT NULL子句的作用。所以你不能這樣做是好事。你不應該用「'或'無號碼'或其他方式來填補它。

如果您希望使這成爲可能,那麼ALTER TABLE b例如使電話號碼可以爲空。

0

我想按照以下步驟操作。我不知道你是如何在商店程序中做到這一點的,但對我來說看起來要複雜得多,因爲你每次需要通過@PhoneNo

  1. 由於該表B是空的(你說這是空的,但加入表B搞糊塗了)

    INSERT INTO TABLEB(CustomerID) 
    SELECT CustomerID 
    FROM TABLE A 
    
  2. 現在,我們可以填充PhoneNo

    UPDATE B 
    SET B.PhoneNo = ISNULL(A.PhoneNo, 0) 
    FROM TABLEB B 
    JOIN TABLEA A ON A.CustomerID = B.CustomerID 
    

您可以取代SET B.PhoneNo = ISNULL(A.PhoneNo, 0)作爲SET B.PhoneNo = @PhoneNo如果你仍然想通過一個填充它們之一。

相關問題