Привязать значение столбца по умолчанию к функции в 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

введите описание изображения здесь

  1. Выберите столбец DOC_Order (или другой столбец, имеющий значение по умолчанию) в представлении дизайна таблицы, чтобы увидеть Свойства

введите описание изображения здесь

  1. Обновить Default Value or Binding с именем функции с помощью скобок так:

введите описание изображения здесь

Примечание: как сказал Лук, все скобки необходимы, включая схему (dbo в этом случае).

Ответ 4

Интересно, теперь представьте, что мы хотим добавить таблицу в качестве параметра этой функции? Как:

alter table DOC_Order 
add constraint 
df_DOC_Order 
default([dbo].[NEWDOC_Order](**TABLE**))
for DOC_Order

Как мы можем сделать, чтобы это работало? Спасибо