Привязать значение столбца по умолчанию к функции в SQL 2005
У меня есть столбец, содержащий элементы, которые могут быть отсортированы пользователем:
DOC_ID DOC_Order DOC_Name
1 1 aaa
2 3 bbb
3 2 ccc
Я пытаюсь выяснить способ правильной инициализации DOC_Order при создании записи. Хорошим значением будет либо соответствующий DO-CID (поскольку он автоматически назначен), либо MAX (DOC-ORDER) + 1
После нескольких поисковых запросов я увидел, что можно вернуть скалярную функцию в столбец по умолчанию.
CREATE FUNCTION [dbo].[NEWDOC_Order]
(
)
RETURNS int
AS
BEGIN
RETURN (SELECT MAX(DOC_ORDER) + 1 FROM DOC_Documents)
END
Но каждый из моих попыток, использующих студию MS SQL Management, закончился "Ошибка проверки по умолчанию для сообщения столбца" DOC_Order ".
Любая идея о том, какой точный синтаксис SQL для назначения функции DEFAULT есть?
Ответы
Ответ 1
Синтаксис добавления такого значения по умолчанию будет
alter table DOC_Order
add constraint
df_DOC_Order
default([dbo].[NEWDOC_Order]())
for DOC_Order
Кроме того, вы можете изменить свою функцию для обработки, когда DOC_Order имеет значение null
Create FUNCTION [dbo].[NEWDOC_Order]
(
)
RETURNS int
AS
BEGIN
RETURN (SELECT ISNULL(MAX(DOC_ORDER),0) + 1 FROM DOC_Documents)
END
Ответ 2
ЕСЛИ кто-то хочет сделать это с помощью интерфейса, набрав
[dbo].[NEWDOC_Order]()
делает трюк. Вам, видимо, нужны все скобки или он отклонит ваш вход.
Ответ 3
Вот скриншоты, которые можно сделать с помощью графического интерфейса SQL Server Management Studio:
- Щелкните правой кнопкой мыши на таблице и выберите
Design
![введите описание изображения здесь]()
- Выберите столбец DOC_Order (или другой столбец, имеющий значение по умолчанию) в представлении дизайна таблицы, чтобы увидеть
Свойства
![введите описание изображения здесь]()
- Обновить
Default Value or Binding
с именем функции с помощью скобок
так:
![введите описание изображения здесь]()
Примечание: как сказал Лук, все скобки необходимы, включая схему (dbo в этом случае).
Ответ 4
Интересно, теперь представьте, что мы хотим добавить таблицу в качестве параметра этой функции? Как:
alter table DOC_Order
add constraint
df_DOC_Order
default([dbo].[NEWDOC_Order](**TABLE**))
for DOC_Order
Как мы можем сделать, чтобы это работало? Спасибо