wh1*_*t1k 1 sql t-sql database sql-server random
请考虑以下从表变量中获取随机行的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;
Run Code Online (Sandbox Code Playgroud)
由于SELECT某种原因,最后一个语句有时会返回0行,有时会返回1,2或3行.
这对我来说没有意义.列的值是唯一的,ABS(CHECKSUM(NEWID())) % @priceClassesCount不能是多值的,可以吗?
当我宣布RowIndex INT NOT NULL PRIMARY KEY而不是公正时,问题就消失了RowIndex INT.有什么想法吗?
该WHERE行每行评估一次.那是美的NEWID().悲惨的美丽为您的情况.
如果您打算使用此方法,您可以将值存储在变量中:
DECLARE @priceClassesCount AS INT;
SET @priceClassesCount = (SELECT COUNT(*) FROM @priceClasses);
SET @RowIndex = 1 + (ABS(CHECKSUM(NEWID())) % @priceClassesCount)
SELECT pc.RowIndex, pc.PriceClassID
FROM @priceClasses pc
WHERE pc.RowIndex = @RowIndex;
Run Code Online (Sandbox Code Playgroud)
希望,RowIndex它没有任何差距.这可能是你没有获得任何行的另一个原因.