当其他人不能为空时,如何只填充表的一列?

时间:2014-06-17 08:40:12

标签: sql sql-server database

我有两个表:表A和表B

表A和表B有一个共同的列:CustomerID。 <{1}}为空时已填充Table A

Table B有另一列Table B无效。因此,我想首先通过从PhoneNo复制相同数据来填充CustomerID Table B列,然后将其他值添加到第二列Table APhoneNo } CAN&#39; N))

问题在于我这样做(在存储过程中):

PhoneNo

当我尝试执行时,这给我一个错误说

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 中的CustomerID列,然后再将值添加到TableB列?

4 个答案:

答案 0 :(得分:2)

我重写了你的查询并且改变了很多。

insert有两列,select现在提供两列。 join已被删除,因为它已过时。 values使用不正确,现在直接使用select

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

答案 1 :(得分:1)

不使用VALUES进行插入:

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

答案 2 :(得分:0)

如果没有电话号码,您无法在B表中插入记录。这正是NOT NULL子句的用途。所以你不能这样做很好。你不应该通过填写“#”来避免这种情况。 &#39;或者没有数字&#39;或者其他什么。

如果你想让它成为可能,那么ALTER TABLE b就可以使电话号码可以为空了。

答案 3 :(得分: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
    
  3. 如果您仍希望逐个填充SET B.PhoneNo = ISNULL(A.PhoneNo, 0),则可以将SET B.PhoneNo = @PhoneNo替换为{{1}}。