Я пытаюсь реализовать следующую ссылку со скалярной функцией, SQL Server 2000 возвращает сообщение об ошибке: Недопустимое использование 'newid' в функции.
http://www.bennadel.com/blog/310-Ask-Ben-Getting-A-Random-Date-From-A-Date-Range-In-SQL.htm
Есть ли способ обойти это?
В SQL 2000 нельзя использовать недетерминированные функции внутри других функций.
Лучший способ сделать это - использовать подзапрос внутри внешнего запроса. В любом случае он будет работать лучше, чем скалярная функция, согласно моему блогу: http://msmvps.com/blogs/robfarley/archive/2009/12/05/dangers-of-begin-and-end.aspx
Единственный способ сделать это - создать представление, которое выбирает значение NEWID (), а затем использовать это представление внутри функции.
Почему бы не передавать NEW_ID () в качестве параметра все время? Излишне использовать вид, ИМХО
ALTER FUNCTION dbo.MyFunc ( @param1 int, @param2 datetime, @GUID uniqueidentifier ) RETURNS int AS .... SELECT dbo.MyFunc (1, '20091221', NEWID())