sql - 将列默认值绑定(bind)到 SQL 2005 中的函数

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

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

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

最佳答案

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

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

关于sql - 将列默认值绑定(bind)到 SQL 2005 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442503/

相关文章:

c# - 01/01/1900 的日期时间问题

sql - 如何在 MSSQL 中声明 VARCHAR 变量

mysql - 大 IN 语句 - 来自电子表格的数据

sql - if exists 在 select 语句耗时 1 秒时耗时 "forever"

php - mssql_connect 从 PHP 5.3 开始不再工作

sql-server - SQL Server varchar 相等测试给出语法错误

tsql - 如何在发布和订阅中删除复制表

.net - oracle sql Developer中的J2SE SDK配置

sql - 存储过程比动态查询慢

sql-server-2005 - 如何使用T-SQL正确连接列?