2012-11-13 50 views
-2

如果同一行中另一列的值等于临时表中的值,我试图向列中添加1。以下是代码。当我从存储过程运行代码时,它将每列添加1,而不仅仅是临时表中显示的那一列。有没有人看到任何错误的查询?当值在临时表中时将sql列更新为1

DECLARE @LineTable TABLE (
TempLineNumber FLOAT) 


INSERT @LineTable 
SELECT DocumentNumber 
FROM chargebackdetailtemptable 
GROUP BY DocumentNumber 
HAVING Count(*) > 1 

UPDATE ChargebackDetailTempTable 
SET LineNumber = (SELECT Max(LineNumber) + 1 
        FROM ChargebackDetailTempTable c 
          LEFT OUTER JOIN @LineTable c2 
           ON c.DocumentNumber = c2.TempLineNumber 
        WHERE c.DocumentNumber IS NOT NULL 
          AND c2.TempLineNumber IS NOT NULL) 
+1

这很可能是因为你正在使用相同的'max(LineNumber)+ 1'更新所有行;你没有指定任何'WHERE'标准。 – LittleBobbyTables

+0

查询中有WHERE标准,我需要移动它吗? – Jeff

回答

0
UPDATE ChargebackDetailTempTable 
SET LineNumber = LineNumber + 1 
FROM ChargebackDetailTempTable 
INNER JOIN @LineTable lt ON lt.DocumentNumber = ChargebackDetailTempTable.DocumentNumber 
WHERE lt.DocumentNumber IS NOT NULL 

您可以使用连接在UPDATE语句。我不确定您是否在+1行号或lt(在上述问题的子查询中被别名为c2)。无论哪种方式,这应该让你到你想要的地方。

+0

我应该在哪里更新Erit的更新声明中的“where”子句?我只需要temp表中非空的记录在'inner join'之后为+1 – Jeff

+0

。如果你在'ChargeBack'和'@ LineTable'之间有一对一的关系(这意味着'DocumentNumber'在两者中都是唯一的),那么'WHERE lt.DocumentNumber IS NOT NULL'。作为示例更新我的帖子。但是,您认为不要将不需要的文档插入临时表中而不是强制更新过滤器?即在进行更新之前预先过滤临时表。 –

+0

工作。谢了,兄弟。 – Jeff