From 13b22525b2c2a85958027a59a979c7b3ecf3555e Mon Sep 17 00:00:00 2001 From: Thomas Hulst Date: Thu, 16 May 2024 13:55:08 +0200 Subject: [PATCH 1/4] fix mssql sql_runif() to return random number for each row in result set --- R/backend-mssql.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/backend-mssql.R b/R/backend-mssql.R index 1850e6d89..b64493ed4 100644 --- a/R/backend-mssql.R +++ b/R/backend-mssql.R @@ -294,7 +294,8 @@ simulate_mssql <- function(version = "15.0") { is.na = mssql_is_null, runif = function(n = n(), min = 0, max = 1) { - sql_runif(RAND(), n = {{ n }}, min = min, max = max) + # https://stackoverflow.com/a/9039661 + sql_runif(RAND(CHECKSUM(NEWID())), n = {{ n }}, min = min, max = max) }, # string functions ------------------------------------------------ From 36e7498731ff8ffe7bc119fb22a167b549d9c281 Mon Sep 17 00:00:00 2001 From: Thomas Hulst Date: Thu, 16 May 2024 14:31:11 +0200 Subject: [PATCH 2/4] CHECKSUM and NEWID to globalVariables() --- R/backend-mssql.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/backend-mssql.R b/R/backend-mssql.R index b64493ed4..1415151f7 100644 --- a/R/backend-mssql.R +++ b/R/backend-mssql.R @@ -660,4 +660,4 @@ bit_to_boolean <- function(x_expr) { } } -utils::globalVariables(c("BIT", "CAST", "%AS%", "%is%", "convert", "DATE", "DATEADD", "DATEFROMPARTS", "DATEDIFF", "DATENAME", "DATEPART", "IIF", "NOT", "SUBSTRING", "LTRIM", "RTRIM", "CHARINDEX", "SYSDATETIME", "SECOND", "MINUTE", "HOUR", "DAY", "DAYOFWEEK", "DAYOFYEAR", "MONTH", "QUARTER", "YEAR", "BIGINT", "INT", "%AND%", "%BETWEEN%")) +utils::globalVariables(c("BIT", "CAST", "%AS%", "%is%", "convert", "DATE", "DATEADD", "DATEFROMPARTS", "DATEDIFF", "DATENAME", "DATEPART", "IIF", "NOT", "SUBSTRING", "LTRIM", "RTRIM", "CHARINDEX", "SYSDATETIME", "SECOND", "MINUTE", "HOUR", "DAY", "DAYOFWEEK", "DAYOFYEAR", "MONTH", "QUARTER", "YEAR", "BIGINT", "INT", "%AND%", "%BETWEEN%", "CHECKSUM", "NEWID")) From 9b93c4cf003b5f55dc2ee1393c94f17bb401484e Mon Sep 17 00:00:00 2001 From: Thomas Hulst Date: Thu, 16 May 2024 14:36:24 +0200 Subject: [PATCH 3/4] update snapshot --- tests/testthat/_snaps/backend-mssql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/_snaps/backend-mssql.md b/tests/testthat/_snaps/backend-mssql.md index f17f8175c..0fd81d2a8 100644 --- a/tests/testthat/_snaps/backend-mssql.md +++ b/tests/testthat/_snaps/backend-mssql.md @@ -231,7 +231,7 @@ SELECT `x` FROM ( - SELECT `df`.*, ROW_NUMBER() OVER (ORDER BY RAND()) AS `col01` + SELECT `df`.*, ROW_NUMBER() OVER (ORDER BY RAND(CHECKSUM(NEWID()))) AS `col01` FROM `df` ) AS `q01` WHERE (`col01` <= 1) From 4900c82ed941c8f08228ba1ebfa37b5f7ad7aa64 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Wed, 26 Nov 2025 14:07:35 +0200 Subject: [PATCH 4/4] Add news bullet --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index b9e722733..85f0c3146 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # dbplyr (development version) +* SQL server: `slice_sample()` returns different results each run (@thomashulst, #1503) * Fixed overwrite flag in `copy_to()` to work when source is in the same DB as destination (@liudvikasakelis, #1535) * Snowflake correctly translates `$` to `:` (@jsowder, #1608) * `dbplyr_uncount()` now works with Redshift (@owenjonesuob, #1601).