問題描述:
需要獲取5~10之間的隨機整數,會遇到錯誤443:在函數內對帶副作用的運算符 'rand' 的使用無效。
create function get_rand_num(@start int,@end int) returns int as begin declare @result int set @result=floor(rand()*(@end-@start+1))+@start return @result end
錯誤信息:
消息 443,級別 16,狀態 1,過程 get_rand_num,第 6 行
在函數內對帶副作用的運算符 'rand' 的使用無效。
解決辦法:
這個rand()竟然不能在函數里面應用,就是因為他是不確定性函數。系統函數中,有兩個常用的,是不可以在函數中使用的,分別是newid()和rand()。
其中一個辦法是創建視圖,將rand()函數封裝到視圖中,然后在函數中調用這個rand視圖。
但是,考慮到用視圖很麻煩,而且由於需求是產生5~10之間的整數,就想到用時間來解決。通過毫秒值來獲取,同樣可以達到隨機數效果。修改如下:
set @result=convert(int,Datepart(ms,getdate())/(1000/(@end-@start+1))+@start)