使用范围内的随机DECIMAL编号更新表(SQL Server)

Ric*_*ick 6 t-sql sql-server

我想更新表项的列ItemValue,其中包含在1和100之间随机生成的十进制值(每行的值不同).每个值应该有两个(随机)数字.

CREATE TABLE Items
(
    ItemID int IDENTITY(1,1) NOT NULL,
    ItemValue decimal(13, 4) NULL,
    CONSTRAINT PK_Items PRIMARY KEY CLUSTERED (ItemID ASC)
)

INSERT INTO Items(ItemValue) VALUES (0)
INSERT INTO Items(ItemValue) VALUES (0)
INSERT INTO Items(ItemValue) VALUES (0)
INSERT INTO Items(ItemValue) VALUES (0)

-- Now, I want to update the table
Run Code Online (Sandbox Code Playgroud)

Max*_*Max 13

您可以使用RAND生成随机数.但是有一个问题 - 每个查询只执行一次RAND,因此所有行都将包含相同的随机值.你可以使用CHECKSUM(NEWID())使每行随机,就像这样

UPDATE items
SET itemValue = ROUND(RAND(CHECKSUM(NEWID())) * (100), 2)
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用此代码片段生成随机十进制值:

CONVERT( DECIMAL(13, 4), 10 + (30-10)*RAND(CHECKSUM(NEWID()))
Run Code Online (Sandbox Code Playgroud)

这将生成 10 到 30 之间的随机十进制数。