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
我必须用另一个值填充一个 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