これはSQL Server 2008では機能しません。
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
エラーは次のとおりです。
キーワード「SET」付近の構文が正しくありません。
何がおかしいのですか?
これはSQL Serverで動作します。
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
そのためにalter columnを使用することはできません。代わりにaddを使用してください。
ALTER TABLE Employee
ADD DEFAULT('SANDNES') FOR CityBorn
これを行う正しい方法は次のとおりです。
コマンドを実行します。
sp_help [table name]
CONSTRAINT
の名前をコピーします。
DEFAULT CONSTRAINT
を削除します。
ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
以下のコマンドを実行してください。
ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
Hoodaticusの解決策は完璧だった、ありがとう、しかし私はまたそれが再実行可能であることを必要とし、それが行われたかどうかをチェックするためにこの方法を見つけた...
IF EXISTS(SELECT * FROM information_schema.columns
WHERE table_name='myTable' AND column_name='myColumn'
AND Table_schema='myDBO' AND column_default IS NULL)
BEGIN
ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END
列のデフォルト値を変更できるシナリオは2つあります。
問い合わせ
create table table_name
(
column_name datatype default 'any default value'
);
この場合、私のSQLサーバーは既存のデフォルト制約値を変更することを許可していません。そのため、デフォルト値を変更するには、既存のシステム生成またはユーザー生成のデフォルト制約を削除する必要があります。そして、そのデフォルト値の後に特定の列に設定することができます。
いくつかの手順に従ってください。
このシステムデータベースプロシージャを実行すると、テーブル名がパラメータとして使用されます。 table内の全てのカラムに対する全ての制約のリストを返します。
execute [dbo].[sp_helpconstraint] 'table_name'
構文:
alter table 'table_name' drop constraint 'constraint_name'
構文:
alter table 'table_name' add default 'default_value' for 'column_name'
喝采@ !!!
前にnullであった既存の列を変更するための3つの簡単なステップが見つかりました
update orders
set BasicHours=0 where BasicHours is null
alter table orders
add default(0) for BasicHours
alter table orders
alter column CleanBasicHours decimal(7,2) not null
ALTER TABLE [dbo].[Employee] ADD DEFAULT ('N') FOR [CityBorn]
次のコマンドを試してください。
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
ファーストドロップの制約
https://stackoverflow.com/a/49393045/2547164
DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
WHERE NAME = N'__ColumnName__'
AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)
2番目のデフォルト値を作成します
ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
スクリプトがエラーなしで複数回実行されることを許可するためのチェック付きのYuckの答えのように。 (information_schema.columnsを使用するよりも少ないコード/カスタム文字列)
IF object_id('DF_SomeName', 'D') IS NULL BEGIN
Print 'Creating Constraint DF_SomeName'
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END
次の構文を使用できます。詳細については、この質問と回答を参照してください。 SQL Serverの既存のテーブルにデフォルト値の列を追加
構文:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
例:
ALTER TABLE SomeTable
ADD SomeCol Bit NULL --Or NOT NULL.
CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is
autogenerated.
DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.
別の方法:
テーブルを右クリックして[デザイン]をクリックし、デフォルト値を設定する列をクリックします。
次に、ページの下部にデフォルト値またはバインディングを追加します。文字列の場合は「1」、intの場合は1です。
デフォルト名ですでに制限が存在する場合
-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);
-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;