2009-01-14 34 views
11

Tôi có một cột chứa các mục có thể được sắp xếp bởi người sử dụng:Bind một giá trị cột mặc định để một hàm trong SQL 2005

DOC_ID DOC_Order DOC_Name 
    1  1  aaa 
    2  3  bbb 
    3  2  ccc 

Tôi đang cố gắng tìm ra một cách để khởi DOC_Order đúng khi mục nhập được tạo. Một giá trị tốt sẽ là DO-CID tương ứng (vì nó được tự động gán), hoặc MAX (DOC-ORDER) + 1

Sau một chút googling tôi thấy nó có thể gán một hàm vô hướng trở về mặc định cột.

Nhưng mỗi lần thử sử dụng MS SQL Management studio đều kết thúc bằng thông báo "Lỗi xác thực mặc định cho cột 'DOC_Order'".

Bất kỳ ý tưởng nào về cú pháp SQL chính xác để gán hàm cho DEFAULT là gì?

Trả lời

20

Cú pháp để thêm một mặc định như thế sẽ

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

Ngoài ra, bạn có thể muốn thay đổi chức năng của bạn để xử lý khi DOC_Order là null

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

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

END 
+0

Hoàn hảo! Cảm ơn rất nhiều! – Luk

+0

Có cách nào để truyền hàm đó một tham số không? –

7

NẾU ai đó muốn làm điều đó bằng giao diện, nhập

[dbo].[NEWDOC_Order]() 

thực hiện thủ thuật. Bạn dường như cần tất cả các dấu ngoặc hoặc nó sẽ từ chối đầu vào của bạn.

1

Dưới đây là ảnh chụp màn hình để làm điều đó thông qua SQL Server Management Studio GUI:

  1. Nhấp chuột phải vào bảng và chọn Design

enter image description here

  1. Chọn cột DOC_Order (hoặc cột khác cần mặc định) trong chế độ xem thiết kế của bảng để xem thích hợp quan hệ

enter image description here

  1. Cập nhật Default Value or Binding với tên hàm với dấu ngoặc như vậy:

enter image description here

Lưu ý: như Luk tuyên bố, tất cả cần có dấu ngoặc bao gồm lược đồ (dbo trong trường hợp này).

Các vấn đề liên quan