2009-01-14 67 views
11

我有一个包含可由用户进行排序项的列:在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

经过一番Google搜索,我看到可以将标量函数的返回值赋给默认值柱。

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'的默认值”消息结束。

任何想法将确切的SQL语法分配给DEFAULT的是什么?

回答

20

的语法来添加这样的一个默认将

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 
+0

完美!非常感谢! – Luk 2009-01-14 10:54:38

7

如果有人想用做界面打字

[dbo].[NEWDOC_Order]() 

是否有窍门。你显然需要所有的括号,否则它会拒绝你的输入。

1

这里的屏幕截图通过SQL Server Management Studio的GUI做到这一点:

  1. 右键单击表并选择Design

enter image description here

  • 在表的设计视图中选择DOC_Order列(或其他需要默认设置的列)以查看 正确关系
  • enter image description here

    与函数名
  • 更新Default Value or Binding用括号 像这样:
  • enter image description here

    注:如漉说明,所有的括号是必需的,包括模式(在这种情况下为dbo)。