Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Default - всё таки может быть пользовательской функцией?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Как то всю жизнь считал, что при указании Default значения поля таблицы, нельзя использовать пользовательские функции.

Энциклопедия юных сурков 2008 года об этом же говорит:
Нельзя.
https://msdn.microsoft.com/ru-ru/library/ms173565.aspx

Однако код что ниже замечательно работает.

CREATE FUNCTION [dbo].[fnGetBaseGUID] ()
RETURNS uniqueidentifier AS
BEGIN
RETURN (SELECT TOP 1 [BaseGUID] FROM [dbo].[tbBases])
END

CREATE TABLE [dbo].[_SS](
	[SourceID] [int] PRIMARY KEY CLUSTERED ,
	[GUID] [uniqueidentifier] NOT NULL DEFAULT ([dbo].[fnGetBaseGUID]())
)

select @@VERSION


Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Вопрос:
c какой версии SQL появилась эта возможность?
27 янв 17, 13:34    [20153199]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Молодой,

так а где сказано что нельзя? имхо больше ситуация что не рекомендуется udf в конестрейнах
27 янв 17, 13:41    [20153258]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Ну вот же:
Синтаксис CREATE DEFAULT [ schema_name . ] default_name AS constant_expression

constant_expression
— Выражение содержащее только постоянные значения (не может включать имена столбцов или других объектов базы данных). Можно использовать любые константы, встроенные функции или математические выражения, за исключением тех, которые содержат типы данных псевдонимов. Нельзя использовать пользовательские функции.
27 янв 17, 13:59    [20153362]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Молодой,

а где вы тут делаете CREATE DEFAULT?
27 янв 17, 14:02    [20153375]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Молодой,

путаете CONSTRAINT DEFAULT с DEFAULT? Это разные вещи.
Вам же не приходит в голову выполнять, например, CREATE RULE? (Это из той же оперы, что и CREATE DEFAULT).
Вроде, Microsoft давно грозится выбросить подобные объекты в одной из следующих версий.
А жаль! Очень было удобно ими пользоваться.
27 янв 17, 14:37    [20153549]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
iap, TaPaK

Понял - я спутал
по сути - свойство CONSTRAINT DEFAULT с объектом DEFAULT.

Тогда вопрос:
CONSTRAINT DEFAULT - всегда допускал использование в нем пользовательских функций?
Для всех более менее современных версий SQL допустима такая схема?
27 янв 17, 14:49    [20153627]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Молодой
iap, TaPaK

Понял - я спутал
по сути - свойство CONSTRAINT DEFAULT с объектом DEFAULT.

Тогда вопрос:
CONSTRAINT DEFAULT - всегда допускал использование в нем пользовательских функций?
Для всех более менее современных версий SQL допустима такая схема?

не помню про 2000, позже да, но это зло
27 янв 17, 14:52    [20153641]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Про то что это - зло понятно.
28 янв 17, 13:57    [20156548]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Всем спасибо за ответы!
Вопрос закрыт.
28 янв 17, 13:58    [20156551]     Ответить | Цитировать Сообщить модератору
 Re: Default - всё таки может быть пользовательской функцией?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Молодой
Как то всю жизнь считал, что при указании Default значения поля таблицы, нельзя использовать пользовательские функции.
Всегда можно было. То есть может и не всегда, но точно давно.
28 янв 17, 14:02    [20156569]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить