SQL Serverの列のデータ型をtinyintからsmallintに変更しようとしています。既定値で列のデータ型を変更する方法
しかし、私の列にはデフォルト値があり、制約の名前はわかりません。
簡単な方法はありますか?
このため、デフォルトの制約の動作しません:
ALTER TABLE mytable
Alter Column myColumn smallint NOT NULL default 1
SQL Serverの列のデータ型をtinyintからsmallintに変更しようとしています。既定値で列のデータ型を変更する方法
しかし、私の列にはデフォルト値があり、制約の名前はわかりません。
簡単な方法はありますか?
このため、デフォルトの制約の動作しません:
ALTER TABLE mytable
Alter Column myColumn smallint NOT NULL default 1
いくつかの手順でこれを行う必要があります。まず、デフォルトの制約を列にドロップし、列を変更します。
-- 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
次の3つのステップのプロセスとして
名前が同じであることが重要です。名前を変更するためにプロセスを繰り返します。
あなたはMS Management Studioを使用して、デフォルトのための制約名を見つけることができます。
あなたは、このようなコードのものを使用することができます。指定したDBのテーブルフォルダを見つけて、Constraintsを見てください。多くの制約がある場合は、「関連する列名を表示するクエリウィンドウに制約をスクリプトする」ことができます。
解決策がある可能性がありますが、 – GregM