如何允许临时表接受空值

问题描述 投票:0回答:5

如果您在 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 Table
alter column
语句,但我想在不重写数百个现有查询的情况下执行此操作。

sql null sql-server-2008-r2 temp-tables
5个回答
9
投票

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

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

8
投票

这个怎么样?

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
投票

(不)幸运的是,这个问题太受欢迎了,并且也出现在 Sybase ASE 15.7 的顶部,因此只需在此处添加我对 Sybase 的答案即可。

对我来说,强制转换、转换或合并都不起作用,但 case 语句却起作用(这就是合并,但是呃......)

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

0
投票

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

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

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

将其放在这里,以便下次我需要这样做时忘记如何...


0
投票

使用 Case 语句如下:

选择 如果 Field1 为 null,则为 null,否则 Field1 以 FieldName 结束, 字段2, 字段3 来自....

© www.soinside.com 2019 - 2024. All rights reserved.