在存储过程不能使用rand()吗
在存储过程这样写:
select @Srand = cast(cast((rand()) *100000000 as int) as varchar(8))
提示:
在函数内的 'rand ' 中对带副作用的或依赖于时间的运算符的使用无效。
[解决办法]
if object_id( 'vTest ') is not null
drop view vTest
if object_id( 'fnTest ') is not null
drop function fnTest
GO
----创建视图,将rand()函数封装到视图中
create view vTest as select rand() as Srand
GO
----在函数中调用视图
create function fnTest()
returns varchar(10)
as
begin
declare @Srand varchar(10)
select @Srand = cast(cast((select Srand from vTest) *100000000 as int) as varchar(8))
return @Srand
end
GO
drop view vTest
drop function fnTest
[解决办法]
存储过程中可以使用rand,但在函数中不能用,邹老大的书中提示用视图代替
create view v_rand
as
select re=rand()
go
使用时
decalre @re float
select @re=re from v_rand
[解决办法]
SQLSERVER2000规定,函数中不能使用返回不确定值的函数.可以将不确定值函数封装到视图中来间接调用.