SQL で階乗を計算するストアドプロシージャにはSQL-Serverの関数・プロシージャのVB.NETでの実行などのサイトがありますが,入力できる引数の上限が比較的小さくあまり実用的ではありません.引数から1ずつ減算して前の値に掛けていくという計算のロジックは比較的シンプルですが,計算コストは逆に高くなります.ここでは引数を一旦自然対数に変換して対数の和を求め,最後に自然対数の底のべき乗を求めることで階乗を求めます.
CREATE PROCEDURE [dbo].[LOG_FACT] @SrcNumber FLOAT AS BEGIN DECLARE @DesNumber FLOAT SET @DesNumber = LOG(1) WHILE @SrcNumber > 0 BEGIN SET @DesNumber = @DesNumber + LOG(@SrcNumber) SET @SrcNumber = @SrcNumber - 1 END SELECT EXP(@DesNumber) END
引数に取りうる最大値は170です.
EXEC LOG_FACT 170; (列名なし) 7.25741561530971E+306