Re: Скалярная функция
От: ilya_ny  
Дата: 27.06.08 02:08
Оценка:
Здравствуйте, ghost_07, Вы писали:

_>Что-то совсем запутался

_>Как написать на T-SQL скалярную функцию, возвращающую одну случайную запись из запроса типа
_>select id from tbl1

_>Пытался получать количество записей в таблице, затем открывал курсор и читал случайное число записей, последнее сохранял. Вот только ничего не работает почему-то


а как ты читал читал случайное число записей в функции? UDF по определению deterministic
потом если ты хочешь возвратить запись, то это уже не скалярная функция. но в твоем случае сойдет — там всего одно поле
я бы передавал случайное число [0..1] в функцию и по нему возвращал запись

как-то так
create dbo.GetRandId(@rnd float) returns int
as
declare @id_min int
declare @id_max int

select  @id_min = min(in), @id_max = max(id) from tbl1

declare @id_rnd int
select @id_rnd = min(id) from tbl1 where id >= @id_min + (@id_max - @id_min) * @rnd

return @id_rnd



если уверен, что пробелов в таблице среди id нет, то можно сразу вернуть @id_min + (@id_max — @id_min) * @rnd
--
с другой стороны я не уверен, что понял вопрос
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.