2012-02-15 27 views
8

SQL Server'daki bir sütunun veri türünü küçüğümden küçük noktaya değiştirmeye çalışıyorum.Varsayılan değer olan bir sütunun veri türü nasıl değiştirilir

Ancak sütümde varsayılan bir değer var ve kısıtlamanın adını bilmiyorum.

Bunu yapmanın kolay bir yolu var mı?

Bunun nedeni varsayılan kısıt çalışmaz:

ALTER TABLE mytable 
Alter Column myColumn smallint NOT NULL default 1 

cevap

19

Bunu birkaç adımda yapmanız gerekir - önce: sütununuzdaki varsayılan kısıtlamayı bırakın, ardından sütununuzu değiştirin.

-- 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

Sen

  • farklı bir isimle yeni bir sütun eklemek üç adımlı bir süreç olarak bunu yapabilirdi,
  • kopyasını Eski sütundan yeni
  • değerlerine eski sütun

Bu adın aynı olması önemlidir, ardından adı tekrar değiştirmek için işlemi tekrarlayın.

+0

Evet, bir çözüm olabilir ama çok fazla veriye sahip olsaydım, bu harika olmazdı – GregM

0

MS Management Studio kullanarak varsayılan için kısıt adını bulabilirsiniz:

Böyle kod şey kullanabilirsiniz. Sadece verilen DB için tablo klasörünü bulun ve Kısıtlamalar'ın altına bakın. Çok sayıda kısıtlama varsa, "Kısıtlama (lar) ı, ilişkili sütun adını gösteren bir sorgu penceresine komut dosyası olarak yazabilirsiniz.

İlgili konular