2009-01-14 63 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)。