如何允许临时表接受空值

时间:2013-03-07 06:34:03

标签: sql null sql-server-2008-r2 temp-tables

如果使用&#34创建临时表,请插入"在SQL Server中,它使用第一个插入来确定列是否接受空值。如果第一个插入具有空值,则该列可以为空,否则它将是不可为空的。

有没有办法使用"插入"来创建临时表接受空值?

实施例

这没有任何问题

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

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

但是这会引发"无法将值NULL插入列' b'"

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

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

我知道我可以做create Tablealter column声明,但我想这样做而不会重写数百条现有查询。

4 个答案:

答案 0 :(得分:4)

这个怎么样?

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

答案 1 :(得分:2)

我会通过在第一次插入之前显式创建临时表来解决这个问题。

create table #temp (a varchar(10) not null, b int null)

答案 2 :(得分:0)

(不幸的是),这个问题太普遍了,在Sybase ASE 15.7中也出现在顶部,所以在这里添加我对Sybase的答案即可。

对我来说,强制转换,转换或合并均不起作用,但案例说明确实有效(这就是合并,但是……)

select
    a = case when 1 = 0 then null else 'one' end, 
    b = case when 1 = 0 null else 500 end 
into #temp

答案 3 :(得分:0)

这是一个老问题,但我有一个类似的问题,我将空值联合到初始查询中,可能帮助了 OP。

Select 'one' as a , 500 as b
into #temp
UNION
SELECT NULL, NULL

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

把它放在这里,以便下次我需要这样做而忘记如何...