2012-03-20 27 views
5

Tôi cố gắng kiểm tra điều gì đó và tôi gặp vấn đề mà tôi không thể ràng buộc mặc định cho cột.Thêm mặc định được xác định trước vào cột trong T-SQL

Mục tiêu của tôi là thay đổi cột và đính kèm theo mặc định được định nghĩa True vào cột đó.

Tôi đang làm gì sai?

CREATE default [dbo].[True] as (1) 
GO 

CREATE TABLE dbo.aaa (column_a INT, column_b char(1)) ; 
GO 

INSERT INTO dbo.aaa (column_a)VALUES (7) ; 
GO 

ALTER TABLE dbo.aaa ADD CONSTRAINT DF_col_b DEFAULT [dbo].[True] FOR column_b ; 
GO 

INSERT INTO dbo.aaa (column_a) VALUES (10) ; 
GO 

SELECT * FROM dbo.aaa ; 
GO 

DROP TABLE dbo.aaa ; 
GO 

Trong ví dụ này tôi nhận được lỗi trên ALTER TABLE dòng

Msg 128, Level 15, State 1, Line 1

Cái tên "dbo.True" không phải là được phép trong ngữ cảnh này. Biểu thức hợp lệ là hằng số, hằng số biểu thức và (trong một số ngữ cảnh) biến. Tên cột không được phép là .

+0

Chào mừng bạn đến với StackOverflow: nếu bạn đăng mã, XML hoặc mẫu dữ liệu, hãy làm nổi bật những dòng đó trong trình soạn thảo và nhấp vào nút "mẫu mã" (' {} ') trên thanh công cụ của trình chỉnh sửa để định dạng và cú pháp độc đáo làm nổi bật nó! –

+1

Bạn có gặp lỗi không? Nếu vậy: ** nơi ** (trên dòng nào trong mã mẫu của bạn) - và ** chính xác thì ** là lỗi gì ?? –

+0

Tôi đã thêm lỗi mà mã của bạn tạo ra cho tôi cho câu hỏi của bạn, nhưng tốt hơn nếu bạn làm điều đó, trong trường hợp tôi vì một lý do nào đó, nhận được một lỗi khác. –

Trả lời

1

Nếu bạn muốn cột của bạn để mặc định "1", tại sao bạn không thử điều này:

ALTER TABLE dbo.aaa ADD CONSTRAINT DF_col_b DEFAULT '1' FOR column_b ; 

mặc định của bạn được gọi là True. Nếu các khả năng duy nhất là True hoặc False, thì có lẽ bạn nên thay đổi kiểu từ char (1) thành bit. Và tuyên bố thay đổi sẽ trở thành:

ALTER TABLE dbo.aaa ADD CONSTRAINT DF_col_b DEFAULT 1 FOR column_b ; 
0

Không có cú pháp để ràng buộc mặc định được xác định trước. Bạn cần phải sử dụng stored procedure:

sp_bindefault 'True', 'dbo.aaa.column_b' 
+0

Đó là sp không được chấp nhận ... –

+0

@SirCrispalot Vì vậy, tạo mặc định. –

+0

có chính xác tôi đã thấy trong tài liệu hướng dẫn này sẽ bị xóa. Nhưng thay thế là gì? nếu tôi tạo một kiểu người dùng định nghĩa và muốn đặt một giá trị mặc định ở đó, thì nó cũng sử dụng tạo mặc định? –

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