SQL 插入 select 并删除 Null 值

SQL Insert into select and removal of Null values

我必须用另一个值填充一个 table,所以我使用:

insert into A (pk1, pk2)
select pk1, pk2
from B

复杂的是,对于 table B 中的每条记录,其中一个值为空,我想在 table A 中创建 3 条具有给定值的记录。由于列数为 2,因此我需要 A 中的 3 x 3 = 9 条记录,例如

insert into A (pk1, pk2)
select isNull(pk1, 'value1' or 'value2' or 'value3'),
       isNull(pk2, 'value4' or 'value5' or 'value6')
from B

上面的语法显然不正确,但只是为了让您了解我正在尝试做什么。由于我不是专家,所以很想使用过程编程语言来完成它,但我敢打赌 SQL 中有一种方法可以做到。如果有任何区别,我正在使用 MS SQL 服务器。

如果参数为 null

,您可以创建 returns 3 行的 table 值函数
create function dbo.ExpandIfNull (@value int)
returns table
as
return 
(
    select Value
    from (values (1),(2),(3)) as v(Value)
    where @value is null

    union all

    select @value
    where @value is not null
)

然后在您的 select 语句中使用 cross apply

select val1.Value, val2.Value
from B
cross apply dbo.ExpandIfNull(pk1) val1
cross apply dbo.ExpandIfNull(pk2) val2