SQL Server錯誤443:在函數內對帶副作用的運算符 'rand' 的使用無效


問題描述:

  需要獲取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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM