2012-02-15 47 views
8

Tôi đang cố thay đổi kiểu dữ liệu của một cột trong SQL Server từ tinyint thành smallint.Cách sửa đổi kiểu dữ liệu của một cột có giá trị mặc định

Nhưng có giá trị mặc định trên cột của tôi và tôi không biết tên của ràng buộc.

Có cách nào dễ dàng để làm điều đó không?

này không làm việc vì sự hạn chế mặc định:

ALTER TABLE mytable 
Alter Column myColumn smallint NOT NULL default 1 

Trả lời

19

Bạn cần thực hiện việc này trong một vài bước - trước tiên: giảm ràng buộc mặc định trên cột của bạn, sau đó sửa đổi cột của bạn.

Bạn có thể sử dụng mã một cái gì đó như thế này:

-- find out the name of your default constraint - 
-- assuming this is the only default constraint on your table 
DECLARE @defaultconstraint sysname 

SELECT @defaultconstraint = NAME 
FROM sys.default_constraints 
WHERE parent_object_id = object_ID('dbo.mytable') 

-- declare a "DROP" statement to drop that default constraint 
DECLARE @DropStmt NVARCHAR(500) 

SET @DropStmt = 'ALTER TABLE dbo.mytable DROP CONSTRAINT ' + @defaultconstraint 

-- drop the constraint 
EXEC(@DropStmt) 

-- alternatively: if you *know* the name of the default constraint - you can do this 
-- more easily just by executing this single line of T-SQL code: 

-- ALTER TABLE dbo.mytable DROP CONSTRAINT (fill in name of constraint here) 

-- modify the column's datatype   
ALTER TABLE dbo.mytable 
Alter Column myColumn smallint NOT NULL 

-- re-apply a default constraint - hint: give it a sensible name! 
ALTER TABLE dbo.mytable 
ADD CONSTRAINT DF_mytable_myColumn DEFAULT 1 FOR MyColumn 
2

Bạn có thể làm điều đó như một quá trình ba bước

  • thêm cột mới với một cái tên khác,
  • bản sao các giá trị từ cột cũ đến mới
  • thả cột cũ

Điều quan trọng là tên giống nhau, sau đó lặp lại quy trình để đổi tên lại.

+0

Yeah có thể là một giải pháp nhưng nếu tôi có rất nhiều dữ liệu, nó sẽ không tuyệt vời – GregM

0

Bạn có thể tìm thấy tên hạn chế cho mặc định sử dụng MS Management Studio. Chỉ cần tìm thư mục bảng cho DB đã cho và xem trong Ràng buộc. Nếu có nhiều ràng buộc, bạn có thể "Script the Constraint (s) vào một cửa sổ truy vấn hiển thị tên cột liên quan.

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