TSQL: почему нельзя использовать newid () внутри скалярной функции - PullRequest
1 голос
/ 21 декабря 2009

Я пытаюсь реализовать следующую ссылку со скалярной функцией, SQL Server 2000 возвращает сообщение об ошибке: Недопустимое использование 'newid' в функции.

http://www.bennadel.com/blog/310-Ask-Ben-Getting-A-Random-Date-From-A-Date-Range-In-SQL.htm

Есть ли способ обойти это?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2009

В SQL 2000 нельзя использовать недетерминированные функции внутри других функций.

Лучший способ сделать это - использовать подзапрос внутри внешнего запроса. В любом случае он будет работать лучше, чем скалярная функция, согласно моему блогу: http://msmvps.com/blogs/robfarley/archive/2009/12/05/dangers-of-begin-and-end.aspx

1 голос
/ 21 декабря 2009

Единственный способ сделать это - создать представление, которое выбирает значение NEWID (), а затем использовать это представление внутри функции.

0 голосов
/ 21 декабря 2009

Почему бы не передавать NEW_ID () в качестве параметра все время? Излишне использовать вид, ИМХО

ALTER FUNCTION dbo.MyFunc (
    @param1 int, 
    @param2 datetime,
    @GUID uniqueidentifier
)
RETURNS int
AS
....



SELECT dbo.MyFunc (1, '20091221', NEWID())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...