PDA

View Full Version : alter table ???



next100years
20-05-2005, 16:04
Cho mình hỏi nếu một cột đã được định nghĩa khóa chính rồi, thì có thể thay đổi kiểu dữ liệu, hay tăng dung lượng dữ liệu của cột đó lên không ?

Ví dụ từ varchar muốn chuyển thành int đó ? Hay là phải drop cái khóa
chính đó đi rồi mới change được ?

Mình muốn là làm trong query analyzer đó, câu lệnh ra sao ? bởi mình làm toàn bị báo lỗi là

"Server: Msg 5074, Level 16, State 8, Line 1
The object 'customer_custno_pk' is dependent on column 'custno'.
Server: Msg 4922, Level 16, State 1, Line 1
ALTER TABLE ALTER COLUMN custno failed because one or more objects access this column."

Câu lệnh của mình là : "alter table customer alter column custno int not null"

CustNo của mình đã được định nghĩa khóa chính.

Khi mình drop cái khóa chính này đi, run lại câu lệnh trên thì lại ok.
Hoặc từ varchar mà là tăng lưu trữ lên thì được, còn giảm đi thì không được varchar(10) --> varchar(15) --> ok nhưng ngược lại thì lại bị báo lỗi trên
Nhưng nếu muốn không phải drop thì làm thế nào ?

xbacala
20-05-2005, 17:26
Phải drop cái PK trước rồi mới đổi được !

Còn từ varchar(15)->varchar(10): nếu table chưa có data thì OK, còn nếu có Data rồi thì phải tạo 1 column tạm rồi move data qua đó.

Nếu dùng EM thì nó sẽ tạo 1 table tạm, move hết data qua đó rồi tạo table mới sau đó move data trở lại dùm mình !

next100years
21-05-2005, 09:30
Bạn làm ơn cho mình hỏi luôn , mình toàn bị gặp lỗi này :

"Server: Msg 547, Level 16, State 1, Line 1
ALTER TABLE statement conflicted with COLUMN FOREIGN KEY constraint 'product_taskno_fk'. The conflict occurred in database 'BTSQL', table 'product', column 'id'."

Câu lệnh của mình là :

"alter table programmer add constraint product_taskno_fk foreign key (taskno)
references product(id)
go"

Trong đó "id" mình để ràng buộc là UNIQUE , còn taskno thì không phải là khóa chính hay gì cả.

next100years
22-05-2005, 22:15
Hix...không ai trả lời sao ??? :((
Các bác làm ơn cho em hỏi thêm là có thể alter table một cột kiểu int, not null hay null chưa có ràng buộc gì cả, giờ em muốn cho nó là identity hoặc default mà không được. toàn bị báo lỗi "The name 'active' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted."

Nếu ngay từ lúc create table thì tạo được default hoặc identity , nhưng giả sử lúc tạo bảng chưa để default hoặc identity , sau đó mới muốn có thì làm thế nào ??? Em làm toàn bị báo lỗi hi***

phatnq2003
25-05-2005, 12:31
Bạn làm ơn cho mình hỏi luôn , mình toàn bị gặp lỗi này :

"Server: Msg 547, Level 16, State 1, Line 1
ALTER TABLE statement conflicted with COLUMN FOREIGN KEY constraint 'product_taskno_fk'. The conflict occurred in database 'BTSQL', table 'product', column 'id'."

Câu lệnh của mình là :

"alter table programmer add constraint product_taskno_fk foreign key (taskno)
references product(id)
go"

Trong đó "id" mình để ràng buộc là UNIQUE , còn taskno thì không phải là khóa chính hay gì cả.

Lỗi này xảy ra khi bạn tạo một khóa quan hệ sai, sai có thể:
- Field ID của product và field taskno của programmer không tương thích kiểu.
- Một trong hai field ID và taskno có dữ liệu không tương thích với field kia.
Bạn nên kiểm tra lại dữ liệu của hai table này xem. Có thể dùng EM để kiểm tra.

next100years
26-05-2005, 20:09
Các bác làm ơn cho em hỏi thêm là có thể alter table một cột kiểu int, not null hay null chưa có ràng buộc gì cả, giờ em muốn cho nó là identity hoặc default mà không được. toàn bị báo lỗi "The name 'active' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted."

Nếu ngay từ lúc create table thì tạo được default hoặc identity , nhưng giả sử lúc tạo bảng chưa để default hoặc identity , sau đó mới muốn có thì làm thế nào ??? Em làm toàn bị báo lỗi hi***

Còn câu này nữa bác trả lời dùm em với ???

phatnq2003
28-05-2005, 13:39
Còn câu này nữa bác trả lời dùm em với ???
Trong ALTER TABLE bạn thêm mệnh đề ADD CONSTRANT để tạo thêm các ràng buộc hoặc các giá trị mặc định.
Bạn mở Help của SQL server ra coi thêm phần này.