【问题标题】:Cannot update a column in sql?无法更新sql中的列?
【发布时间】:2017-03-16 06:23:29
【问题描述】:

我无法使用以下查询更新我的备注栏

update Customers
set customers.Remarks = remarks_stg.remarks
from 
    (select remarks 
     from remarks_stg) remarks_stg
where customers.Remarks = 'updateme'

查询成功执行,但客户中的remarks 列未更新。

我正在尝试从remarks_Stg 表的remarks 列更新customers 表中的remarks 列。

问候

更新

【问题讨论】:

  • Remarks 表和Customers 表是什么关系?
  • 请显示示例数据。
  • @Shruti 。没有任何关系
  • 如果没有任何东西可以将两者联系起来,那么您将无法真正做您正在尝试的事情,因为您将更新customers.remarks 以等于remarks_stg 中的第一个值。
  • @Bodhi 顺序是由什么定义的?行号?某种身份证?如果您在问题中包含示例输入和输出会更清楚。

标签: sql sql-server tsql sql-update multiple-columns


【解决方案1】:

我认为来自以下查询的数据没有返回。

SELECT * FROM customers
Where customers.Remarks = 'update'

如果数据正在返回,则更新将完成

顺便说一句,查询中存在逻辑错误。您没有指定要从remarks_stg 表中记录的记录。

需要在where条件中指定两个表的关系。

Update Customers
Set customers.Remarks = remarks_stg.remarks
From
     (Select remarks, YourRelationshipColumn from remarks_stg) remarks_stg
Where
     Customers.Remarks = 'updateme' AND
     Customers.YourRelationshipColumn = Remarks_Stg.YourRelationshipColumn

如果不指定关系,则检索remarks_stg表中的第一条记录。

更新

您可以使用ROW_NUMBER() 执行此操作。您应该从Customer 表中写入一个唯一列。

UPDATE Customers
SET Remarks = RESULT.remarks
FROM
(
    SELECT A.CustomerID, B.remarks
    FROM
        (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RowId, * FROM Customers) A INNER JOIN 
        (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RowId, * FROM remarks_stg) B ON A.RowId = B.RowId
) RESULT
WHERE
    Customers.CustomerID = RESULT.CustomerID

注意:两张表之间的关系必须是。如果没有,你必须改变结构。

【讨论】:

  • 我有大约91个客户,是否可以将备注栏直接更新或合并到客户表中。
  • 什么都没有返回 .. SELECT * FROM customers Where customers.Remarks = 'updateme' - Bodhi 5 分钟前
  • @Bodhi 如果数据没有返回,则无法更新。您想更新哪些客户?是否要通过合并备注表中的所有行来更新单个列?
  • 我想用相同的顺序更新客户表中的所有列,例如备注 (remarks_Stg) 列,
【解决方案2】:

试试这个:

update Customers
SET customers.Remarks= remarks_stg.remarks
from remarks_stg
where customers.Remarks='updateme'

但它将使用表备注_stg 中的第一个值,因此尝试添加另一个条件,如下所示:

AND remarks_stg.Id = 2

【讨论】:

  • 这对我不起作用。另外,请注意这两个表没有任何关系。它们是独立的表,现在我想使用备注_stg 的记录来更新客户表
  • SELECT * FROM Customers c WHERE c.Remarks = 'updateme' 是否返回一些东西?
  • 没有返回 .. SELECT * FROM customers Where customers.Remarks = 'updateme'
  • 将“updateme”替换为您要更新的值。或删除条件。请注意,如果您删除 WHERE 子句,整列 customer.remarks 将被更新。
  • 无论有无 where 子句,它都不会更新。
【解决方案3】:

您将需要 From 子句中的“Customers”表并将其与“remarks_stg”表连接。将下面的“SomeColumn”替换为两个表之间的列匹配。

update Customers
set customers.Remarks = remarks_stg.remarks
from Customers 
Inner Join 
    (select remarks 
     from remarks_stg) remarks_stg
     On Customers.SomeColumn = remarks_stg.SomeColumn
where customers.Remarks = 'updateme'

【讨论】:

    【解决方案4】:

    更新客户

    SET Remarks =(从remarks_stg中选择备注)

    其中备注 = 'updateme'

    更新客户

    SET Remarks =(从remarks_stg中选择备注WHERE id = [特定ID])

    其中备注 = 'updateme'

    【讨论】:

    • 这对我不起作用。另外,请注意这两个表没有任何关系。它们是独立的表,现在我想使用备注_stg 的记录来更新客户表 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2020-10-04
    • 2014-04-17
    • 2022-07-04
    • 2011-09-29
    相关资源
    最近更新 更多