函数从SQL Server 2012列表中随机选择一个值
我指的是 并且想把它变成一个函数。我将要选择的值传递给函数。示例语法: 来自(‘比尔’、‘史蒂夫’、‘杰克’、…)函数从SQL Server 2012列表中随机选择一个值,sql,sql-server,Sql,Sql Server,我指的是 并且想把它变成一个函数。我将要选择的值传递给函数。示例语法: 来自(‘比尔’、‘史蒂夫’、‘杰克’、…) 解决这个问题的一种方法是创建一个用户定义的表类型来包含名字,然后将该表传递给标量值函数 CREATE TYPE FirstNames AS TABLE (firstName varchar(50), RandomSeed varchar(128)) GO DECLARE @myFirstNames as FirstNames INSERT INTO @myFirstNames
解决这个问题的一种方法是创建一个用户定义的表类型来包含名字,然后将该表传递给标量值函数
CREATE TYPE FirstNames AS TABLE (firstName varchar(50), RandomSeed varchar(128))
GO
DECLARE @myFirstNames as FirstNames
INSERT INTO @myFirstNames
SELECT 'Bill', NEWID()
UNION SELECT 'Steve', NEWID()
UNION SELECT 'Jack', NEWID()
SELECT * FROM @myFirstNames
接下来,创建一个标量值函数,将新表类型作为参数
CREATE FUNCTION RandomFirstName(@TableName dbo.FirstNames READONLY)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @name VARCHAR(50)
SELECT TOP 1 @name = a.firstName
FROM @TableName a
ORDER BY a.RandomSeed
RETURN @name
END
最后,按如下方式调用函数:
SELECT [dbo].[RandomFirstName] (@myFirstNames)
您可以尝试以下方法:
CREATE TABLE Contacts(id INT IDENTITY, name varchar(10))
GO
INSERT INTO dbo.Contacts VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
GO
CREATE VIEW vNames AS
SELECT * FROM (VALUES('Bill', NEWID()),('Steve',NEWID()),('Jack',NEWID())) Names(name, g)
GO
CREATE FUNCTION RandomFrom()
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @name VARCHAR(10)
SELECT TOP 1 @name = name
FROM dbo.vNames
ORDER BY g
RETURN @name
END
GO
UPDATE dbo.Contacts SET name = dbo.RandomFrom()
SELECT * FROM dbo.Contacts
输出:
id name
1 Bill
2 Jack
3 Jack
4 Bill
5 Steve
6 Steve
7 Steve
8 Jack
9 Bill
10 Bill
谢谢,我能一次完成吗?i、 e.将要选择的值传递给函数。每次运行函数时,我都会选择on值。您看到jax的答案了吗?是的,我看到了。我需要的是能够从(‘Bill’、‘Steve’、‘Jack’、‘John’)中随机选择,而无需创建类型或表。