В хранимой процедуре (с использованием SQL Server 2008 R2 SP2) можно ли вернуть NewSequentialID()
без переменной временной таблицы?
Я могу успешно получить NewSequentialID()
с помощью временной таблицы:
Получение значения NEWSEQUENTIALID() при вставке
Возможно, я старомоден, но я стараюсь воздерживаться от использования временных таблиц без крайней необходимости… хотя это может быть тот случай, когда это абсолютно необходимо…
ЕСЛИ я пытаюсь:
DECLARE @NewSequentialID UNIQUEIDENTIFIER;
SET @NewSequentialID = NEWID()
… он работает так, как ожидалось.
ЕСЛИ я пытаюсь:
DECLARE @NewSequentialID UNIQUEIDENTIFIER;
SET @NewSequentialID = NEWSEQUENTIALID()
… Я получаю следующую ошибку:
Встроенная функция newsequentialid() может использоваться только в выражении DEFAULT для столбца типа "uniqueidentifier" в операторе CREATE TABLE или ALTER TABLE. Его нельзя комбинировать с другими операторами для формирования сложного скалярного выражения.
- Является ли ЕДИНСТВЕННЫМ решением использовать метод временной таблицы?
- Кто-нибудь знает причину, по которой Microsoft реализовала разницу между
NEWSEQUENTIALID()
для работы какNEWID()
? - Кто-нибудь знает, есть ли шанс, что Microsoft обновит
NEWSEQUENTIALID()
, чтобы он работал какNEWID()
?
гео
ОБНОВЛЕНИЕ. Я не уверен, почему Microsoft решила реализовать этот метод таким образом, поскольку они заявляют, что «NEWSEQUENTIALID является оболочкой над функцией Windows UuidCreateSequential»… но похоже, что нет невременной переменной. табличный метод. (По крайней мере, пока.)
Спасибо всем за комментарии и ответы. [Примечание модератора:] Я не знаю, что делать с вопросом, если ответ "невозможно". Поэтому я собираюсь отдать должное @marc_s за подробное описание обходного пути.