Здравствуйте, 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
--
с другой стороны я не уверен, что понял вопрос