2016-04-20 27 views
4

私は2つのテーブルt1t2を持っています。どちらもidnameの列を持ちます。 t1の名前列はNULLではないと定義され、デフォルト値は 'Peter'です。NULL値をNULL以外の列に挿入するときの既定値の設定方法SQL Server?

t2からすべての値をt1テーブルに挿入したいとします。しかし、私はt2テーブルにいくつかのヌル値を持っています。私は値を挿入しようとすると:

Insert into t1 
    select * 
    from t2; 

それは、このエラーがスローされます。

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'Name', table 'T1'; column does not allow nulls.

たちは insertnull値をしようとすると、列にデフォルト値を設定するために、任意の可能性あり。

答えて

6

第一溶液、

insert into t1 
    select id,isnull(name,'Peter') from t2 

第二の溶液

ALTER TABLE T1 ALTER COLUMN name varchar(255) NULL 

insert into t1 
select id,name from t2 

ALTER TABLE T1 ALTER COLUMN name varchar(255) NOT NULL 

第三の溶液:(ベスト)

Declare @GetDefaultValue varchar(255) 

    SELECT @GetDefaultValue= COLUMN_DEFAULT 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA = 'dbo' 
     AND TABLE_NAME = 'T1' 
     AND COLUMN_NAME = 'name' 


insert into t1 select id,isnull(name,@GetDefaultValue) from t2 
2

ので、代わりに

Insert into t1 select * from t2 

のあなたのクエリを書き直すことができ

Insert into t1 
select col1,col2, ISNULL(name, 'Peter'), othercolumns from t2 
2

使用COALESCE

クエリとして

INSERT INTO t1(Id, Name) 
SELECT Id, COALESCE(Name, 'Peter') FROM t2; 

CASE式を使用することもできます。

クエリ

INSERT INTO t1(Id, Name) 
SELECT Id, CASE WHEN Name IS NULL THEN 'Peter' ELSE Name END 
FROM t2; 
1

のようなあなたのクエリを変更します。次のリンク

http://www.w3schools.com/sql/sql_isnull.asp

を参照してください。詳細については

Insert into t1 select COALESCE(column1,'') from t2;

関連する問題