Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Молодой 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] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Молодой, так а где сказано что нельзя? имхо больше ситуация что не рекомендуется udf в конестрейнах |
27 янв 17, 13:41 [20153258] Ответить | Цитировать Сообщить модератору |
Молодой Member Откуда: Москва Сообщений: 180 |
Ну вот же: Синтаксис CREATE DEFAULT [ schema_name . ] default_name AS constant_expression constant_expression — Выражение содержащее только постоянные значения (не может включать имена столбцов или других объектов базы данных). Можно использовать любые константы, встроенные функции или математические выражения, за исключением тех, которые содержат типы данных псевдонимов. Нельзя использовать пользовательские функции. |
27 янв 17, 13:59 [20153362] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Молодой, а где вы тут делаете CREATE DEFAULT? |
27 янв 17, 14:02 [20153375] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Молодой, путаете CONSTRAINT DEFAULT с DEFAULT? Это разные вещи. Вам же не приходит в голову выполнять, например, CREATE RULE? (Это из той же оперы, что и CREATE DEFAULT). Вроде, Microsoft давно грозится выбросить подобные объекты в одной из следующих версий. А жаль! Очень было удобно ими пользоваться. |
27 янв 17, 14:37 [20153549] Ответить | Цитировать Сообщить модератору |
Молодой Member Откуда: Москва Сообщений: 180 |
iap, TaPaK Понял - я спутал по сути - свойство CONSTRAINT DEFAULT с объектом DEFAULT. Тогда вопрос: CONSTRAINT DEFAULT - всегда допускал использование в нем пользовательских функций? Для всех более менее современных версий SQL допустима такая схема? |
27 янв 17, 14:49 [20153627] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
не помню про 2000, позже да, но это зло |
||
27 янв 17, 14:52 [20153641] Ответить | Цитировать Сообщить модератору |
Молодой Member Откуда: Москва Сообщений: 180 |
Про то что это - зло понятно. |
28 янв 17, 13:57 [20156548] Ответить | Цитировать Сообщить модератору |
Молодой Member Откуда: Москва Сообщений: 180 |
Всем спасибо за ответы! Вопрос закрыт. |
28 янв 17, 13:58 [20156551] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
|
||
28 янв 17, 14:02 [20156569] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |