我只想将表A中的列复制并粘贴到表B中。
我检查了两个表有相同的行数
ALTER TABLE [dbo].[cube]
ADD [peer_group] int
--check row count same
SELECT COUNT(*)
FROM [dbo].[cube]
--13103507
SELECT TOP 10
peer_group
FROM [dbo].[cube]
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
SELECT COUNT(group_5)
FROM [dbo].[v_group]
--13103507
SELECT TOP 10
group_5
FROM [dbo].[v_group]
--1
--1
--2
--2
--3
--3
--4
--4
--4
--4
我使用SET
:
UPDATE [dbo].[cube]
SET [peer_group] =
(SELECT [group_5]
FROM [dbo].[v_group]
)
但它会引发错误:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
任何人都知道如何解决这个问题吗?谢谢!
对不起,我可以在这里方便地发布我的数据。如果需要,请告诉我,我会模拟一些数据。
更新:
基于答案/评论(谢谢!)我理解发生错误,因为SQL认为我想将SELECT
子查询中检索到的许多值放入空新列[peer_group]的每一行。
似乎SET [column_1] = [column_2]
只有当两个列位于同一个表中或联接表中时才有效(请参阅@Praveen'解决方案)。
考虑到我的具体情况,[dbo].[v_group]
是从[dbo].[cube]
生成的视图。我只是使用
SELECT *
,_something_ AS [peer_group] --this is what I had in [dbo].[v_group]
INTO [dbo].[new]
FROM [dbo].[cube]
答案 0 :(得分:2)
你可以试试;
Update a
set a.[peer_group] = b.[group_5]
from [dbo].[cube] a
join [dbo].[v_group] b on a.id = b.id;
错误是由于子查询返回多个更新值 您需要将这两个表连接起来进行更新。