从SQL Server中的多个列更新列

时间:2015-12-24 10:32:24

标签: sql sql-server tsql sql-update

我正在尝试在SQL Server中进行更新。我有一个有50个用户的临时表。该表包含PenWidth和日期。我想基于临时表的personalid更新主表日期,临时表中的日期。主表有3000多个用户。

逻辑是在临时表和主表中存在personalid时使用临时表中的日期更新主表中的用户日期(每个用户不同)。

查询总是返回太多记录的子查询错误,并尝试更新主表中的所有记录。

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

我尝试过使用游标,其中和for循环和FETCH等:

personalid

3 个答案:

答案 0 :(得分:2)

如果失败:

UPDATE m
SET MainTable_Date = t.[Date]
FROM MainTable AS m
INNER JOIN TempTable AS t ON m.personal_id = t.PersonalId

这意味着表格上没有一对一的关系。

用于检查运行:

SELECT
    m.personal_id,
    t.PersonalId
FROM MainTable AS m
LEFT JOIN TempTable AS t ON m.personal_id = t.PersonalId
ORDER BY M.personal_id, t.PersonalId

答案 1 :(得分:1)

问题是我们真的不知道这部分SQL查询的背后是什么。

SELECT 
    t.Date 
FROM 
    TempTable t 
INNER JOIN 
    MainTable m ON t.PersonalId = m.personalid
WHERE 
    t.PersonalId = m.personalid

当您尝试将其设置为MainTable_Date时,此部分查询似乎会为您提供多个值。您必须为查询提供更多详细信息才能获得一个值。也许您应该使用MAX(..)值或尝试汇总数据。

答案 2 :(得分:1)

此查询将满足您的需要我认为

CREATE TABLE MainTable
(
Personal_id int,
[MainTable_Date] date
)



CREATE TABLE #TempTable
(
Personalid int,
[Date] date
)



INSERT INTO MainTable
VALUES(1,'20120202'),(2,'20130202'),(3,'20150202'),(4,'20150206')

INSERT INTO #TempTable
VALUES(1,'20120203'),(2,'20130311'),(3,'20100202')


SELECT * FROM MainTable

SELECT * FROM #TempTable

UPDATE MainTable
SET MainTable_Date=(SELECT [DATE] FROM #TempTable AS T WHERE T.Personalid=M.Personal_id)
FROM MainTable AS M 
WHERE M.Personal_id IN (SELECT Personalid FROM #TempTable)




SELECT * FROM MainTable


DROP TABLE MainTable

DROP TABLE #TempTable