2012-02-15 16 views
8

SQL Serverの列のデータ型をtinyintからsmallintに変更しようとしています。既定値で列のデータ型を変更する方法

しかし、私の列にはデフォルト値があり、制約の名前はわかりません。

簡単な方法はありますか?

このため、デフォルトの制約の動作しません:

ALTER TABLE mytable 
Alter Column myColumn smallint NOT NULL default 1 

答えて

19

いくつかの手順でこれを行う必要があります。まず、デフォルトの制約を列にドロップし、列を変更します。

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

次の3つのステップのプロセスとして

  • をそれを行うことができ
  • 、別の名前で新しい列を追加コピー古い列から新しい列への値
  • 古い列を削除する

名前が同じであることが重要です。名前を変更するためにプロセスを繰り返します。

+0

解決策がある可能性がありますが、 – GregM

0

あなたはMS Management Studioを使用して、デフォルトのための制約名を見つけることができます。

あなたは、このようなコードのものを使用することができます。指定したDBのテーブルフォルダを見つけて、Constraintsを見てください。多くの制約がある場合は、「関連する列名を表示するクエリウィンドウに制約をスクリプトする」ことができます。

関連する問題