52

SQL Server 2008 で SQL ステートメントを使用して列の既定値を変更しようとしています。多くの場所で、テーブルを作成するとき/列を追加するときに既定値を設定する方法を見つけましたが、設定する方法はわかりません/列がすでに存在したら、それを変更します。

これは、追加時に設定するために使用できるものです。

ALTER TABLE MyTable ADD MyColumn int NOT NULL DEFAULT 0

それは機能しますが、後で変更しようとすると:

ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL DEFAULT -1
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL SET DEFAULT -1

それらのどれも構文的に正しくなく、私がふりをする構文がどこにもありません。私が持っている唯一のオプションは、新しい列を追加し、前の列から値をコピーしてから、前の列と新しい列を削除して変更を加えることですが、それは私には正しくないようです。

たった1つの簡単な文で私がやりたいことをする方法はありますか?

ありがとう。

4

6 に答える 6

82

デフォルト値で列を追加すると、デフォルトの制約が作成されます。

create table _temp 
( x int default 1)

sp_help _temp結果:

constraint_type constraint_name
DEFAULT on column x DF___temp__x__5A3B20F9

したがって、列定義のデフォルト句は、制約を作成するための単なるショートカットです。デフォルト値は列固有のプロパティではありません。既存の列のデフォルトを変更する場合は、最初に制約を削除する必要があります。

alter table _temp drop constraint DF___temp__x__5A3B20F9 

次に、新しいデフォルトの制約を作成します。

alter table _temp add constraint DF_temp_x default 2 for x
于 2013-03-21T12:20:46.287 に答える
15

DEFAULT 制約を削除して、このような新しい制約を追加する必要があります

alter table Mytable
drop constraint <constraint name>
go
alter table MyTable
add constraint df_MyTable_MyColumn default -1 for MyColumn
go

sp_helpconstraint MyTable を使用して制約名を取得する

于 2013-03-21T12:19:48.387 に答える
7

DEFAULTは制約です。を使用しますALTER TABLE ADD CONSTRAINT

ALTER TABLE MyTable
ADD CONSTRAINT <constraint name>
DEFAULT -1 FOR MyColumn

次のように、最初に現在の制約を削除する必要があります。

ALTER TABLE MyTable
DROP CONSTRAINT <constraint name>
于 2013-03-21T12:20:14.433 に答える
2

列が存在しない場合は、列のデフォルト値を追加します

DECLARE @defaultLock VARCHAR(100)
SELECT @defaultLock = (SELECT object_definition(default_object_id) AS definition FROM sys.columns WHERE name = 'Lock' AND object_id = object_id('dbo.Positions'))
    IF @defaultLock IS NULL
        ALTER TABLE Positions ADD DEFAULT (0) FOR Lock
于 2016-04-25T15:57:16.497 に答える