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

问题描述:

在SQL Server 2012中,我试图设置我的“TradeDate”列的值等于我的“MARKET_DAY”列的值。这里是我当前的代码:基于另一个表的SQL Server更新失败?

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中的noob,请温柔一些)

+0

条件是什么? 'dbo.try1'中有多少行,'dbo.yesterday'中有多少行?你可以给我们一个例子,你如何从'dbo.yesterday'更新'dbo.try1'中的数据。 – outcoldman 2013-04-07 19:08:55

+0

'dbo.try1'在它的'TradeDate'列中没有数据。我试图将数据从'dbo.yesterday'的'MARKET_DAY'列复制到'dbo.try1'的'TradeDate'列。这可能是糟糕的数据库设计,但对于手头的任务来说是必要的。 – user1067257 2013-04-07 19:10:27

你试图插入来自“昨天”数据表“try1”?

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

我们有一个赢家!完美的作品。出于好奇,你知道为什么'UPDATE'语法不起作用吗? – user1067257 2013-04-07 19:19:31

+1

UPDATE用于“更新”现有行。例如:如果您有TradeDate数据X,并且您想使用“昨天”Y的值更新其值,那么您可以使用UPDATE SET tradedate = marketday,其中tradedate = X且marketday = Y – Vishy 2013-04-07 19:20:30

+0

现在我知道了。说得通。非常感谢! – user1067257 2013-04-07 19:24:27

你上面的查询会做什么,它会以相同的结果更新每一行的列值。我认为您希望将相应的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 
+0

即使使用连接语法...... – user1067257 2013-04-07 19:16:13

+0

仍然得到'(0行受影响)'您在哪个列上指定了'Inner join'? – Sachin 2013-04-07 19:20:45

+0

我认为你的问题与更新专栏有关。如果是插入的情况,而不是你在问题中指定的原因? – Sachin 2013-04-07 19:22:54

,这将是真正的帮助,如果你能告诉我们你的表的设计,但到目前为止,这是我的猜想:

你要更新必须共同之处否则更新荣获”实体工作正常!

这里是一个例子:

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

+0

他希望我们为它工作 – 2013-04-07 19:35:18