【问题标题】:Bind a column default value to a function in SQL 2005将列默认值绑定到 SQL 2005 中的函数
【发布时间】:2010-10-01 08:19:33
【问题描述】:

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

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 语法是什么吗?

【问题讨论】:

    标签: sql sql-server-2005 tsql default-value


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

      [dbo].[NEWDOC_Order]()
      

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

      【讨论】:

        【解决方案3】:

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

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

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

        1. 用带括号的函数名更新Default Value or Binding 像这样:

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

        【讨论】:

          猜你喜欢
          • 2011-03-05
          • 2016-08-03
          • 2011-10-15
          • 1970-01-01
          • 1970-01-01
          • 2012-06-22
          • 1970-01-01
          • 2014-12-31
          • 1970-01-01
          相关资源
          最近更新 更多