web-dev-qa-db-ja.com

既存の列にデフォルト値を設定する方法

これはSQL Server 2008では機能しません。

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

エラーは次のとおりです。

キーワード「SET」付近の構文が正しくありません。

何がおかしいのですか?

326
Nakul Chaudhary

これはSQL Serverで動作します。

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
504
Yuck
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
149
hoodaticus

そのためにalter columnを使用することはできません。代わりにaddを使用してください。

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
44

これを行う正しい方法は次のとおりです。

  1. コマンドを実行します。

    sp_help [table name] 
    
  2. CONSTRAINTの名前をコピーします。

  3. DEFAULT CONSTRAINTを削除します。

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  4. 以下のコマンドを実行してください。

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    
26
user3310402

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

列のデフォルト値を変更できるシナリオは2つあります。

  1. テーブル作成時
  2. 既存のテーブルの既存の列を変更します。

  1. テーブル作成時/新規カラム作成時。

問い合わせ

create table table_name
(
    column_name datatype default 'any default value'
);
  1. 既存のテーブルの既存の列を変更する

この場合、私のSQLサーバーは既存のデフォルト制約値を変更することを許可していません。そのため、デフォルト値を変更するには、既存のシステム生成またはユーザー生成のデフォルト制約を削除する必要があります。そして、そのデフォルト値の後に特定の列に設定することができます。

いくつかの手順に従ってください。

  1. 列の既存のデフォルト値制約をすべてリストします。

このシステムデータベースプロシージャを実行すると、テーブル名がパラメータとして使用されます。 table内の全てのカラムに対する全ての制約のリストを返します。

execute [dbo].[sp_helpconstraint] 'table_name'
  1. 列の既存のデフォルト制約を削除します。

構文:

alter table 'table_name' drop constraint 'constraint_name'
  1. その列に新しいデフォルト値制約を追加します。

構文:

alter table 'table_name' add default 'default_value' for 'column_name'

喝采@ !!!

5
Sunil Sharma

前に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 
3
David Fawzy
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3
steave

次のコマンドを試してください。

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
2
Hasna Ashraf

ファーストドロップの制約

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]
2
Mise

スクリプトがエラーなしで複数回実行されることを許可するためのチェック付きの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
1
ScottFoster1000

次の構文を使用できます。詳細については、この質問と回答を参照してください。 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です。

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;
1
tibx