2012-01-08 17 views
36

は、私はこのようなテーブルを持っている:SQLテーブルにデフォルト値を挿入する方法は?

create table1 (field1 int, 
       field2 int default 5557, 
       field3 int default 1337, 
       field4 int default 1337) 

は、私がフィールド2とFIELD4のデフォルト値を持つ行を挿入したいです。

私はinsert into table1 values (5,null,10,null)を試しましたが、動作しません。ISNULL(field2,default)も動作しません。

行を挿入するときに列の既定値を使用するようデータベースに指示するにはどうすればよいですか?

+2

を書くことができますが*すべて*の列がデフォルト値を持っている場合は[この質問](http://stackoverflow.com/questions/25900996)も参照してください。 – stakx

答えて

52

だけ挿入ステートメントでデフォルト値を使用する列は含めないでください。例えば:

INSERT INTO table1 (field1, field3) VALUES (5, 10); 

は... field2field4のデフォルト値を取る、とfield3field1および10に5を割り当てます。

Insert into Table (Field2) values(5) 

それが定義されている場合は他のすべてのフィールドがnullまたはそのデフォルト値を持つことになります:あなたは彼らにこのような何かを省略しなければならないデフォルト値を挿入するには

+1

カラムにデフォルト値が定義されておらず、 "NOT ALLOW NULLS"に設定されている場合はどうなりますか? – Danon

4

そして、フィールド2とFIELD4この

INSERT INTO table1 (field1, field3) VALUES (5,10) 

ようにそれを試してみてはデフォルト値を持っている必要があります。

2

あなたの列がNULL値を含めることはできません場合は、そうでない場合はNULLに渡されたデフォルトの代わりに使用し、エラーを生成しないであろう、だけでなくNOT NULLとして列を定義する必要があります。

あなたはに(あなたはを使用したいですフィールドを指定する必要があります)これらのフィールドへの値を渡さない場合は、デフォルト値が使用されます。

INSERT INTO 
    table1 (field1, field3) 
VALUES (5,10) 
97

ベストプラクティスそれはあなたがこれを行うにはしたくない場合は、DEFAULTキーワードを使用し、

insert into table1 (field1, field3) values (5,10) 

しかし、テーブルの変更(新しい列または列の順序など)から独立しているので、あなたの列を一覧表示します

insert into table1 values (5, DEFAULT, 10, DEFAULT) 
+7

驚くばかり!これはまさに私が探していたものです。注意:NULLの代わりにDEFAULTを渡すこともできます.DEFAULT制約がある場合はデフォルト値を取得し、NULLが許可され、デフォルト制約が指定されていない場合はNULLを取得します。 – John

-2
CREATE PROC SP_EMPLOYEE        --By Using TYPE parameter and CASE in Stored procedure 
(@TYPE INT) 
AS 
BEGIN 
IF @TYPE=1 
BEGIN 
SELECT DESIGID,DESIGNAME FROM GP_DESIGNATION 
END 
IF @TYPE=2 
BEGIN 
SELECT ID,NAME,DESIGNAME, 
case D.ISACTIVE when 'Y' then 'ISACTIVE' when 'N' then 'INACTIVE' else 'not' end as ACTIVE 
FROM GP_EMPLOYEEDETAILS ED 
    JOIN GP_DESIGNATION D ON ED.DESIGNATION=D.DESIGID 
END 
END 
+1

私はこれを答えとは思わない。 –

4

最良の方法は次のとおりです。

insert your_table 
default values 
+0

これは、すべての列にデフォルト値が関連付けられていて、列名を指定したくない場合に機能します。 – umbersar

0

あなたがこの方法で

GO 
ALTER TABLE Table_name ADD 
column_name decimal(18, 2) NOT NULL CONSTRAINT Constant_name DEFAULT 0 
GO 
ALTER TABLE Table_name SET (LOCK_ESCALATION = TABLE) 
GO 
COMMIT 
関連する問題