我指的是 SQL Server 2012 Random string from a list功能隨機從列表中選擇SQL Server 2012的
值,並想使之成爲一個功能。對於函數,我傳遞值來從中進行選擇。例如語法:
RandomFrom( '比爾', '史蒂夫', '傑克',......)
,它會隨機返回其中之一。
我指的是 SQL Server 2012 Random string from a list功能隨機從列表中選擇SQL Server 2012的
值,並想使之成爲一個功能。對於函數,我傳遞值來從中進行選擇。例如語法:
RandomFrom( '比爾', '史蒂夫', '傑克',......)
,它會隨機返回其中之一。
解決此問題的一種方法是創建一個用戶定義表類型來包含名字,然後將該表傳遞給標量值函數。
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
謝謝,我能做到這一點在一杆?即通過以起作用以從中選擇的值。每次運行函數時,我都會選擇值。 – Bill
你看到jax的答案了嗎? –
是的,我做到了。我所需要的是能夠勝任的選擇RandomFrom('Bill','Steve','Jack','John'),而不必創建類型或表格。 – Bill