TSQL循环遍历不包含顺序ID的行

时间:2014-12-26 21:19:43

标签: sql sql-server tsql

我需要遍历表中的每一行来执行某些操作。该表的主键是GUID标识符,因此我无法在循环中使用它。这就是我到目前为止所做的:

DECLARE @RowCount INT
SET @RowCount = (SELECT COUNT(EmploymentIdentifier) FROM tblEmployment)

DECLARE @I INT
SET @I = 1

WHILE (@I <= @RowCount)
BEGIN
    --Just some variables I'll be using later
    DECLARE @PaymentTypeOld int, @PaymentTypeNew uniqueidentifier

    -- How do I select each unique row here? I'm stuck at:
    SELECT TOP 1 FROM tblEmployment WHERE EmploymentIdentifier == ???

    //Logic goes here..

    SET @I = @I + 1

END

我尝试使用ROW_NUMBER(),但是在使用OVER时出现语法错误。

只要处理表中的所有行,处理行的顺序并不重要。

1 个答案:

答案 0 :(得分:1)

当col1的值为1时,这只会设置myField =当前值* 2.当col1的值为2时,myfield将乘以3.如果col1是其他任何内容,则myField保持不变。

Update myTable set MyField = Case when Col1 = 1 then MyField*2  
                                  When Col1 = 2 then MyField*3
                                                else myfield end

你也可以做多个条件...... 现在,在我们将结果乘以2之前,Col1必须为1且col2必须为N

Update myTable set MyField = Case when Col1 = 1 and Col2 ='N' then MyField*2 
                                                              else MyField end

它可能是一个简单的where子句,如果我们只需要将某些记录更新为特定值,但是如果所有记录都必须更新并且更新因记录而异,那么减少处理记录的开销似乎是最有效的,然后案件陈述是要走的路..

当col1为1时,这只是将myField乘以2。

Update mytable set myField = myField*2 where col1=1