2012-04-11 53 views
4

我试图生成一个格式如下的字符串:99-88-77其中三个2位数是随机生成的。TSQL RAND()问题

我TSQL的作品:

declare @result nvarchar(50) 
    DECLARE @counter smallint, @ci smallint, @cu smallint, @dc smallint 

     SET @ci=RAND()*100 
     SET @cu=RAND()*100 
     SET @dc=RAND()*100 

     --SET @counter = @counter + 1 

    set @result = CAST(@ci AS varchar(2)) +'-'+CAST(@cu AS varchar(2))+'-'+CAST(@dc AS varchar(2)) 
    print @result 

主要生产(这个时候):16-37-30

我需要得到这个字符串插入表中的每个记录。

现在我想包装成一个函数,但显然我不能在UDF中使用RAND()。

如何在使用插入语句时调用此函数来调用?

回答

5

您可以将其作为一个两步过程来完成。

首先,创建一个视图来生成随机数:

CREATE VIEW vRandNumber 
AS 
SELECT RAND() as RandNumber 

其次,创建你UDF从视图拉:

CREATE FUNCTION dbo.udfTest 
(
) 
RETURNS nvarchar(50) 
AS 
BEGIN 

    DECLARE @result nvarchar(50) 
    DECLARE @counter smallint, @ci smallint, @cu smallint, @dc smallint 

    SET @ci=(SELECT RandNumber FROM vRandNumber)*100 
    SET @cu=(SELECT RandNumber FROM vRandNumber)*100 
    SET @dc=(SELECT RandNumber FROM vRandNumber)*100 

    set @result = CAST(@ci AS varchar(2)) +'-'+CAST(@cu AS varchar(2))+'-'+CAST(@dc AS varchar(2)) 

RETURN @result 
END 

这将返回您刚才请求你的价值。然后,当你想你的价值你只是使用,你会得到你的答案随机:

SELECT dbo.udfTest() 

OR

INSERT INTO yourTable 
(
    randNumber 
) 
SELECT dbo.udfTest() 

我只是在SQL Server 2005测试这和它的工作。

+0

+1好方法围绕rand()问题 – wickedone 2012-04-11 22:31:17

+0

完美!谢谢! – kaplooeymom 2012-04-11 22:51:48