SQL Server更新失败基于另一个表?

时间:2013-04-07 19:01:17

标签: sql sql-server tsql sql-update

在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的菜鸟,请温柔,请。)

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

如果您能向我们展示您的桌面设计,那将非常有用,但到目前为止,这就是我的猜测:

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

这是一个例子:

dbo.try1

enter image description here

dbo.yesterday

enter image description here

这是查询:

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更新它们。

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

enter image description here