14

我有一列包含可以由用户排序的项目:

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 Studio 的尝试都以“验证列 'DOC_Order' 的默认值时出错”消息结束。

知道将函数分配给 DEFAULT 的确切 SQL 语法是什么吗?

4

3 回答 3

24

添加这样的默认值的语法是

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

此外,当 DOC_Order 为空时,您可能希望更改要处理的函数

Create FUNCTION [dbo].[NEWDOC_Order] 
(
)
RETURNS int
AS
BEGIN

RETURN (SELECT ISNULL(MAX(DOC_ORDER),0) + 1 FROM DOC_Documents)

END
于 2009-01-14T10:38:45.693 回答
7

如果有人想使用界面执行此操作,请键入

[dbo].[NEWDOC_Order]()

成功了。您显然需要所有括号,否则它将拒绝您的输入。

于 2009-01-14T10:58:28.510 回答
4

这是通过 SQL Server Management Studio GUI 执行此操作的屏幕截图:

  1. 右键单击表格并选择Design

在此处输入图像描述

  1. 在表格的设计视图中选择DOC_Order列(或其他需要默认的列)以查看属性

在此处输入图像描述

  1. Default Value or Binding使用带括号的函数名称进行更新,如下所示:

在此处输入图像描述

注意:正如 Luk 所说,需要所有括号,包括模式(在这种情况下为dbo )。

于 2016-01-28T22:00:37.547 回答