Câu hỏi Thêm một cột với một giá trị mặc định cho một bảng hiện có trong SQL Server


Làm thế nào một cột có giá trị mặc định được thêm vào một bảng hiện có trong SQL Server 2000 / SQL Server 2005?


2297
2017-09-18 12:30


gốc


và cái này nữa w3schools.com/sql/sql_alter.asp - Academy of Programmer


Các câu trả lời:


Cú pháp:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Thí dụ:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Ghi chú:

Tên ràng buộc tùy chọn:
Nếu bạn bỏ đi CONSTRAINT D_SomeTable_SomeCol sau đó SQL Server sẽ tự động tạo
một Contraint mặc định với một tên buồn cười như: DF__SomeTa__SomeC__4FB7FEF6

Tuyên bố có giá trị tùy chọn:
Các WITH VALUES chỉ cần thiết khi Cột của bạn là Nullable
và bạn muốn Giá trị mặc định được sử dụng cho các bản ghi hiện có.
Nếu cột của bạn là NOT NULL, sau đó nó sẽ tự động sử dụng Giá trị mặc định
cho tất cả các Bản ghi Hiện có, cho dù bạn chỉ định WITH VALUES hay không.

Cách Chèn làm việc với Ràng buộc Mặc định:
Nếu bạn chèn một bản ghi vào SomeTable và làm không phải Chỉ định SomeCol's giá trị, sau đó nó sẽ mặc định 0.
Nếu bạn chèn một bản ghi  Chỉ định SomeColgiá trị của NULL (và cột của bạn cho phép null),
thì Ràng buộc mặc định sẽ không phải được sử dụng và NULL sẽ được chèn làm Giá trị.

Ghi chú dựa trên phản hồi tuyệt vời của mọi người bên dưới.
Trân trọng cảm ơn:
@Yatrix, @WalterStabosz, @YahooSerious và @StackMan cho nhận xét của họ.


2920
2017-09-18 12:34



Hãy nhớ rằng nếu cột là nullable, thì null sẽ là giá trị được sử dụng cho các hàng hiện có. - Richard Collette
@Thecrocodilehunter Nullable cột có nghĩa là bạn có thể chèn Null cho các giá trị cột. Nếu nó không phải là một cột nullable, bạn phải chèn một số giá trị của kiểu dữ liệu đó. Vì vậy, đối với các bản ghi hiện có, Null sẽ được chèn vào chúng và trong bản ghi mới, giá trị mặc định của bạn sẽ được chèn trừ khi được chỉ định khác. Có lý? - Yatrix
Tôi thích câu trả lời này tốt hơn một chút so với dbugger bởi vì nó đặt tên rõ ràng ràng buộc mặc định. Ràng buộc mặc định vẫn được tạo bằng cú pháp của dbugger, ngoại trừ tên của nó được tạo tự động. Biết chính xác tên là tiện dụng khi viết kịch bản lệnh DROP-CREATE. - Walter Stabosz
@Vertigo Đó là CHỈ đúng nếu cột là NOT NULL. Hãy thử điều này: create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah; Bạn sẽ thấy 2 giá trị NULL cho cột b. - ErikE
Sử dụng WITH VALUES để cập nhật các hàng có sẵn nullable. Xem MSDN: "Nếu cột được thêm cho phép giá trị rỗng và WITH VALUES được chỉ định, giá trị mặc định được lưu trữ trong cột mới, được thêm vào các hàng hiện có. " - Yahoo Serious


ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Sự bao gồm của MẶC ĐỊNH điền vào cột trong hiện tại các hàng có giá trị mặc định, vì vậy ràng buộc NOT NULL không bị vi phạm.


869
2017-09-18 12:31



Vấn đề với câu trả lời đó là giá trị mặc định chỉ hợp lệ cho các bản ghi mới. Các bản ghi hiện có sẽ vẫn có giá trị NULL. - Roee Gavirel
Bạn sẽ thấy rằng không phải như vậy. Nếu không, ràng buộc sẽ bị vi phạm. - dbugger
Các cột trong các hàng hiện có được lấp đầy với giá trị mặc định. Một thử nghiệm thực nghiệm nhỏ sẽ chứng minh điều đó. - dbugger
Chỉ cần làm rõ - nếu "NOT NULL" được bỏ qua khỏi lệnh, giá trị cho các hàng hiện tại sẽ KHÔNG được cập nhật và sẽ vẫn là NULL. Nếu "NOT NULL" được bao gồm trong lệnh, giá trị cho các hàng hiện có S W được cập nhật để phù hợp với mặc định. - Stack Man
Đối với nhiều cột ALTER TABLE table_1 THÊM col_1 int NOT NULL DEFAULT (1), col_2 int NULL - aads


Khi thêm một cột rỗng, WITH VALUES sẽ đảm bảo rằng giá trị DEFAULT cụ thể được áp dụng cho các hàng hiện có:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

196
2018-04-12 17:40



Đây là điểm mấu chốt. Thật dễ dàng để giả định một cột với một DEFAULT ràng buộc sẽ luôn có một giá trị - nghĩa là, không phải là NULL, mặc dù NOT NULL không được chỉ định. - Bill Brinkley
@tkocmathla uh, tôi không nói về BIT datatype, tôi đã nói về điều này BIT  cột. Nhìn vào câu trả lời, cột được khai báo là NOT NULL. - rsenna


ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO

115
2017-09-18 12:39



Điều này sẽ không hoạt động nếu bảng đã có nội dung vì cột "không có giá trị" mới được tạo trước khi ràng buộc giá trị mặc định - WDuffy
+1 của tôi cho đoạn trích sau lần đầu tiên GO thêm một ràng buộc vào cột hiện có. - Barry Guvenkaya


ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

104
2017-08-05 03:28



điều này thêm null! phải không được null trước - baaroz
@baaroz, điều này làm việc với NOT NULL: ALTER BẢNG MYTABLE ADD MYNEWCOLUMN VARCHAR (200) NOT NULL DEFAULT 'SNUGGLES' - stom


Cẩn thận khi cột bạn đang thêm có NOT NULL ràng buộc, nhưng không có DEFAULT ràng buộc (giá trị). Các ALTER TABLE tuyên bố sẽ thất bại trong trường hợp đó nếu bảng có bất kỳ hàng nào trong đó. Giải pháp là xóa một trong hai NOT NULL ràng buộc từ cột mới hoặc cung cấp DEFAULT ràng buộc cho nó.


84
2017-09-24 16:03



bất kì Mẫu SQL về nó ? - Kiquenet


Phiên bản cơ bản nhất chỉ với hai dòng

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

78
2018-05-25 14:50





Sử dụng:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

64
2017-12-09 17:45





Nếu bạn muốn thêm nhiều cột, bạn có thể thực hiện theo cách này, ví dụ:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

55
2017-10-14 18:38





Sử dụng:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

Tài liệu tham khảo: ALTER TABLE (Giao dịch-SQL) (MSDN)


44
2017-12-27 02:44