我有两个表:表A和表B
表A和表B有一个共同的列:CustomerID
。 <{1}}为空时已填充Table A
。
Table B
有另一列Table B
无效。因此,我想首先通过从PhoneNo
复制相同数据来填充CustomerID
Table B
列,然后将其他值添加到第二列Table A
(PhoneNo
} 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
列?
答案 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
。
由于表B
为空(你说它是空的,但加入表B
让我感到困惑)
INSERT INTO TABLEB(CustomerID)
SELECT CustomerID
FROM TABLE A
现在,我们可以填充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
替换为{{1}}。