2013-03-07 11 views
5

SQL Serverで "insert into"を使用して一時テーブルを作成すると、最初の挿入を使用して列がNULL値を受け入れるかどうかが判断されます。最初の挿入がNULL値を持つ場合、その列はNULL可能になります。そうでない場合、NULLは無効になります。一時テーブルでNULL値を使用できるようにする方法

null値を受け入れるために「insert into」を使用して一時テーブルを作成する方法はありますか?

これは何の問題も

Select 'one' as a , null as b 
into #temp 

insert into #temp 
Select 'two' as a , 500 as b 

せずに動作しますが、これは私がcreate Tableかを行うことができます知っている

Select 'one' as a , 500 as b 
into #temp 

insert into #temp 
Select 'two' as a , null as b 

を "列 'B' にNULL値を挿入できません" スローalter columnステートメントですが、私は何百もの既存のクエリを書き直すことなくそれをやりたいのです。

+1

の可能性のある重複 - あなたがで偽のレコードを挿入した場合http://stackoverflow.com/questions/5465245/create-a-nullable-column-using-sql-server-select-into – steoleary

+0

それが動作します非常に両方の列の値として 'NULL'で始まっていますか? – Serg

+0

@Sergはい、それは動作しますが、これを解決するには間違った方法です。 – Smith

答えて

3

これはいかがですか?

Select CONVERT(varchar(100), 'one') as a , CONVERT(int, 500) as b 
into #temp 

insert into #temp 
Select 'two' as a , null as b 

select * from #temp order by 1 
+0

それは本当にうまくいった。ありがとう。 –

1

これは、最初に挿入する前にテンポラリテーブルを明示的に作成することで回避できます。

create table #temp (a varchar(10) not null, b int null) 
関連する問題