Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数从SQL Server 2012列表中随机选择一个值_Sql_Sql Server - Fatal编程技术网

函数从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’)中随机选择,而无需创建类型或表。