4

次のような形式の文字列を生成しようとしています: 99-88-77 3 つの 2 桁の数字がランダムに生成されます。

動作する私の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 ステートメントを使用するときにこれをラップして呼び出すにはどうすればよいですか?

4

1 に答える 1

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

これにより、要求した値が返されます。次に、値が必要なときに使用するだけで、ランダムな答えが得られます。

SELECT dbo.udfTest()

また

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

これをSQL Server 2005でテストしたところ、うまくいきました。

于 2012-04-11T22:25:51.413 に答える