2012-04-11 12 views
4

私は99-88-77のようにフォーマットされた文字列を生成しようとしています.3つの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()を使用することはできません。

insertステートメントを使用すると、この呼び出しをどのようにラップすることができますか?

答えて

5

これは2段階のプロセスとして実行できます。

まず、あなたの乱数を生成するためのビューを作成します。

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 

これはあなたがちょうど要求したあなたの値を返します。あなたの価値、あなただけ利用したいとするとき、あなたはあなたのランダムな答えを得るだろう:私はちょうどSQL Server 2005でこれをテストし

SELECT dbo.udfTest() 

OR

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

をし、それが働きました。

+0

+1 rand()の問題の周りにいい方法 – wickedone

+0

完璧!ありがとう! – kaplooeymom