我想仅为表中的所有行更新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中获得预期的结果。需要你帮助的人来解决这个问题。 或者您可以使用光标给我另一个解决方案。
答案 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