【发布时间】:2017-08-04 21:55:13
【问题描述】:
考虑以下从表变量中获取随机行的 T-SQL 代码 (MS SQL Server 2014):
DECLARE @priceClasses TABLE (
RowIndex INT,
PriceClassID NVARCHAR(MAX))
;
INSERT INTO @priceClasses VALUES
(0, 'RETAIL')
,(1, 'WHOLESALE')
,(2, 'WHOLESALE2')
;
DECLARE @priceClassesCount AS INT;
SET @priceClassesCount = (SELECT COUNT(*) FROM @priceClasses);
SELECT
PriceClasses.RowIndex,
PriceClasses.PriceClassID
FROM
@priceClasses AS PriceClasses
WHERE
PriceClasses.RowIndex = ABS(CHECKSUM(NEWID())) % @priceClassesCount;
最后一个SELECT 语句,出于某种原因,有时返回 0 行,有时返回 1、2 或 3 行。
这对我来说没有意义。列的值是唯一的,ABS(CHECKSUM(NEWID())) % @priceClassesCount不能多值,可以吗?
当我声明 RowIndex INT NOT NULL PRIMARY KEY 而不仅仅是 RowIndex INT 时,问题就消失了。有什么想法吗?
【问题讨论】:
-
您也可以通过 newid() 更改此设置以获取前 1 个订单。
-
@SeanLange 感谢您的想法!
标签: sql sql-server database tsql random