如何只更新1列,但计算所有行?

时间:2014-07-07 10:43:07

标签: sql sql-server sql-server-2008

我想仅为表中的所有行更新1列,总计算为: 列数据乘以0.9到1.2之间的随机数。

UPDATE TABLE
SET ABC = (SELECT ABC*(RAND()*((1.2-0.9)+0.9)) FROM TABLE)

好idk如何在适当的T-SQL中编写它。我的查询没有在SQL Server 2008 R2中获得预期的结果。需要你帮助的人来解决这个问题。 或者您可以使用光标给我另一个解决方案。

5 个答案:

答案 0 :(得分:2)

认为你有一个括号问题(对于rand“范围”),而不是编写查询的方式(如果我理解的话)

update table
set abc = abc * (RAND() * (1.2-0.9) + 0.9)

注意

“随机”乘数对于此语句更新的所有行都是相同的,正如Damien_The_Unbeliever所注意到的那样

答案 1 :(得分:0)

UPDATE YourTABLE
SET ABC = ABC*(RAND()*((1.2-0.9)+0.9))

答案 2 :(得分:0)

从代码块开始,我看到了几个基本的语法错误。更新语句的基本语法是

UPDATE [Tablename] 
    SET [Columnname] = (Value or Calculation or subquery) 
    WHERE (condition)

了解更多信息check this

答案 3 :(得分:0)

SET NOCOUNT ON
DECLARE 
    @ABC_ID                        AS INT, 
    @RANDOM_GEN_NO    AS VARCHAR(50),
    @TEMP                        AS VARCHAR(50)

DECLARE ABC_CURSOR CURSOR FOR
SELECT @ABC_ID, RANDOM_GEN_NO FROM ABCTABLE FOR UPDATE OF RANDOM_GEN_NO
OPEN ABC_CURSOR
FETCH NEXT FROM ABC_CURSOR
INTO @EMP_ID, @RANDOM_GEN_NO

WHILE (@@FETCH_STATUS = 0)
BEGIN
    SELECT @TEMP =  ABC*(RAND()*((1.2-0.9)+0.9))
    UPDATE ABCTABLE SET ABC = @TEMP WHERE CURRENT OF ABC_CURSOR

    FETCH NEXT FROM ABC_CURSOR
    INTO @ABC_ID, @RANDOM_GEN_NO
END

CLOSE ABC_CURSOR
DEALLOCATE ABC_CURSOR

SET NOCOUNT OFF

或更新更新语句更新ABCTable SET ABC = abc * yourcode

无需在更新声明中选择

答案 4 :(得分:0)

请尝试以下代码:

更新A
SET A.ABC = B.rand
来自表A
内连接 (SELECT A.pkcolumn,A.ABC *(RAND()*((1.2-0.9)+0.9))作为rand FROM TABLE A)B
在A.pkcolumn = B.pkcolumn