CHECKSUM(NEWID())负值

时间:2018-06-27 16:19:21

标签: sql sql-server

我需要使用随机整数值更新Auftrag表中的记录

UPDATE Auftrag SET Dauer = ((CHECKSUM(NEWID()) % 10)+0.5), Anfahrt = ((CHECKSUM(NEWID()) % 70)+1), Beschreibung= 'Auto filled' WHERE Dauer IS NULL AND MitID IS NOT NULL

但是为什么我在DauerAnfahrt上也得到负值,我该如何解决?

2 个答案:

答案 0 :(得分:0)

您可以使用checksum(...)函数返回abs()的绝对值:

UPDATE Auftrag SET 
  Dauer = ABS(CHECKSUM(NEWID())) % 10 + 0.5, 
  Anfahrt = ABS(((CHECKSUM(NEWID())) % 70 + 1, 
  Beschreibung= 'Auto filled'
WHERE 
  Dauer IS NULL 
  AND MitID IS NOT NULL

我删除了不必要的括号,因为操作顺序在这里得到解决。

答案 1 :(得分:0)

我通常将函数包装在rand()中:

UPDATE Auftrag
    SET Dauer = floor(rand(checksum(newid())) * 10) + 0.5,
        Anfahrt = floor(rand(checksum(newid())) * 70) + 1,
        Beschreibung= 'Auto filled'
    WHERE Dauer IS NULL AND MitID IS NOT NULL;