ランダムな INT 値を返すユーザー定義関数です。
NewID() 関数を利用しています。
■書式
- dbo.NewIdInt(最小値, 最大値)
- 例: SELECT dbo.NewIdInt(0, 10)
■注意
ユーザー定義関数は、本来 決定的である必要があります。
つまり、同じ引数に対して、常に同じ結果を返す必要があります。
しかし、このNewIdInt は、常に異なる値を返します。
したがって、SQL Server のクエリープロセッサが NewIdInt をうまく処理できない場合も考えられます。
■関数定義
NewIdInt 関数は、ビューをひとつ必要とします。
CREATE VIEW NewIdView
AS
SELECT NewID() AS ID
GO
-- NewID を利用してランダムな INT を返します
CREATE FUNCTION NewIdInt
(
@MinValue int, -- 最小値
@MaxValue int -- 最大値
)
RETURNS INT
AS
BEGIN
-- 変数宣言
DECLARE @id INT
-- NewIdView をクエリーし、結果を INT に変換します
SELECT @id = abs(convert(int, convert(varbinary, ID)) % (@MaxValue - @MinValue + 1)) + @MinValue FROM NewIdView (NOLOCK)
RETURN @id
END