Return 使用 SQL 服务器中的函数的随机行号
Return a random row number using a function in SQL Server
我正在尝试编写一个函数,从 table 和 return 中随机选择一组行。该函数的第一步创建并填充一个本地 table 变量,其中包含 suitable 行 ID。 table 定义如下:
DECLARE @SuitableID TABLE (
Id INT
)
这个 table 可以容纳任意数量的 ID。该函数需要随机 return 其中之一,但我不知道该怎么做。我尝试了以下方法:
DECLARE @ReturnedID INT
SELECT TOP 1 @ReturnedID = Id
FROM @SuitableID
ORDER BY NEWID()
哪个 return 是一个错误:
Invalid use of a side-effecting operator 'newid' within a function.
TAMPLESAMPLE 似乎也不起作用:
SELECT @ReturnedID = Id
FROM @SuitableID
TABLESAMPLE (1 ROWS)
我认为这个语法是正确的,但我的数据库不同意。
Incorrect syntax near the keyword 'TABLESAMPLE'.
我做错了什么,我该如何执行我想要的操作?
select CAST(CRYPT_GEN_RANDOM(8) AS bigint)
这会选择一个随机数,所以我不知道您是否可以将其合并到
对于这种情况和类似的情况,我通常在数据库中有一个特殊的视图:
create view [dbo].[sys_ViewNDF]
as
select rand() as [Rnd], getdate() as [Now], getutcdate() as [UTCNow], newid() as [GUID];
然后您可以将它与您的 UDF 中的 table 结合起来,如下所示:
SELECT TOP (1) @ReturnedID = s.Id
FROM @SuitableID s
cross join dbo.sys_ViewNDF v
ORDER BY v.GUID;
这对你有用吗?至少它有效:)
CREATE VIEW dbo.GetNewID
AS
SELECT NewId() AS [NewID]
GO
CREATE FUNCTION GetRandomID()
RETURNS INT
AS
BEGIN
DECLARE @SuitableID TABLE (
Id INT
)
insert into @SuitableID (ID)
values(1),(2),(3)
RETURN (
SELECT TOP 1 ID
FROM @SuitableID
ORDER BY (SELECT [NewId] FROM GetNewID)
)
END
GO
SELECT dbo.GetRandomID()
我正在尝试编写一个函数,从 table 和 return 中随机选择一组行。该函数的第一步创建并填充一个本地 table 变量,其中包含 suitable 行 ID。 table 定义如下:
DECLARE @SuitableID TABLE (
Id INT
)
这个 table 可以容纳任意数量的 ID。该函数需要随机 return 其中之一,但我不知道该怎么做。我尝试了以下方法:
DECLARE @ReturnedID INT
SELECT TOP 1 @ReturnedID = Id
FROM @SuitableID
ORDER BY NEWID()
哪个 return 是一个错误:
Invalid use of a side-effecting operator 'newid' within a function.
TAMPLESAMPLE 似乎也不起作用:
SELECT @ReturnedID = Id
FROM @SuitableID
TABLESAMPLE (1 ROWS)
我认为这个语法是正确的,但我的数据库不同意。
Incorrect syntax near the keyword 'TABLESAMPLE'.
我做错了什么,我该如何执行我想要的操作?
select CAST(CRYPT_GEN_RANDOM(8) AS bigint)
这会选择一个随机数,所以我不知道您是否可以将其合并到
对于这种情况和类似的情况,我通常在数据库中有一个特殊的视图:
create view [dbo].[sys_ViewNDF]
as
select rand() as [Rnd], getdate() as [Now], getutcdate() as [UTCNow], newid() as [GUID];
然后您可以将它与您的 UDF 中的 table 结合起来,如下所示:
SELECT TOP (1) @ReturnedID = s.Id
FROM @SuitableID s
cross join dbo.sys_ViewNDF v
ORDER BY v.GUID;
这对你有用吗?至少它有效:)
CREATE VIEW dbo.GetNewID
AS
SELECT NewId() AS [NewID]
GO
CREATE FUNCTION GetRandomID()
RETURNS INT
AS
BEGIN
DECLARE @SuitableID TABLE (
Id INT
)
insert into @SuitableID (ID)
values(1),(2),(3)
RETURN (
SELECT TOP 1 ID
FROM @SuitableID
ORDER BY (SELECT [NewId] FROM GetNewID)
)
END
GO
SELECT dbo.GetRandomID()