【问题标题】:SQL Server Update Fails Based on Another Table?SQL Server 更新基于另一个表失败?
【发布时间】:2013-04-07 19:01:17
【问题描述】:

在 SQL Server 2012 中,我试图将“TradeDate”列的值设置为“MARKET_DAY”列的值。这是我当前的代码:

USE Sales
GO
update dbo.try1
SET dbo.try1.TradeDate = dbo.yesterday.MARKET_DAY
FROM dbo.try1, dbo.yesterday

但是,当我运行它时,我得到:

(0 row(s) affected)

我不知道为什么。任何帮助是极大的赞赏。 (我是 T-SQL 的菜鸟,请温柔一点。)

【问题讨论】:

  • 条件是什么? dbo.try1 中有多少行,dbo.yesterday 中有多少行?你能给我们举个例子,你想如何从dbo.yesterday更新dbo.try1中的数据
  • dbo.try1 在其TradeDate 列中没有数据。我正在尝试将数据从dbo.yesterdayMARKET_DAY 列复制到dbo.try1TradeDate 列。这可能是糟糕的数据库设计,但对于手头的任务来说是必要的。

标签: sql sql-server tsql sql-update


【解决方案1】:

您是否尝试将“昨天”表中的数据插入“try1”?

INSERT INTO try1(TradeDate)
SELECT MARKET_DAY FROM yesterday
--You can mention your condition, if anything specific here.

【讨论】:

  • 我们赢了!完美运行。出于好奇,您知道为什么UPDATE 语法不起作用吗?
  • UPDATE 用于“更新”现有行。例如:如果您有 TradeDate 数据 X,并且您想使用“昨天”Y 的值更新其值,那么您可以使用 UPDATE SET tradedate=marketday where tradedate=X and marketday=Y
  • 现在我知道了。说得通。非常感谢!
  • 但您必须确保避免重复条目。如果你执行 N 次查询,来自 MARKEY_DAY 的所有数据都会愉快地插入到 try1 中。
【解决方案2】:

上面的查询会做什么,它会用相同的结果更新每一行的列值。我认为您希望将相应的 MARKET_DAY 值更新为相应的 TradeDate 列。在这种情况下,您需要将JOIN 运算符与常见的column 一起使用

USE Sales
GO
update dbo.try1
SET dbo.try1.TradeDate = dbo.yesterday.MARKET_DAY
FROM dbo.try1 INNER JOIN dbo.yesterday
ON dbo.try1.columnName=dbo.yesterday.columnName

【讨论】:

  • 您在哪一栏指定了Inner join
  • 我认为您的问题与更新专栏有关。如果是插入的情况,那么您为什么不在问题中指定?
  • 因为我不了解UPDATEINSERT 的本质。对含糊之处深表歉意,我可以看到您的回复回答了我提出的问题。
【解决方案3】:

如果您能向我们展示您的表格设计,那将非常有帮助,但到目前为止,我猜是这样的:

您尝试更新的实体必须是共同的,否则更新将无法正常工作!

这是一个例子:

dbo.try1

dbo.yesterday

这里是查询:

USE DBTest
GO
update dbo.try1
SET dbo.try1.TradeDate = dbo.yesterday.MARKET_DAY
FROM dbo.try1 INNER JOIN dbo.yesterday
ON dbo.try1.id=dbo.yesterday.id

在这种情况下,两个表中的实体都有一个共同的 id,因此我能够根据它们的 id 更新它们。

这是执行上述查询的结果:

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 2013-09-05
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多