使用sql在表中插入两个或多个逗号分隔的值
我想尝试在表中插入两个变量。值用逗号分隔,但我不知道如何插入它 我的情况如下 我创建临时表使用sql在表中插入两个或多个逗号分隔的值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想尝试在表中插入两个变量。值用逗号分隔,但我不知道如何插入它 我的情况如下 我创建临时表 create table #temp (sku varchar(10), qty int) 现在用值声明两个变量 declare @sku varchar(200) = 'RCLET0005,RCLET0015'; declare @qty varchar(100) = '2,1'; 现在我想在#temp表中插入这个变量 我有分裂功能。 我试着在下面提问 insert into #temp (sku,
create table #temp (sku varchar(10), qty int)
现在用值声明两个变量
declare @sku varchar(200) = 'RCLET0005,RCLET0015';
declare @qty varchar(100) = '2,1';
现在我想在#temp表中插入这个变量
我有分裂功能。
我试着在下面提问
insert into #temp (sku,qty) values
((select value from [dbo].[fn_Split](@sku, ',')),
(select value from [dbo].[fn_Split](@qty, ',')))
你可以这样做
WITH cte AS
(
SELECT ROW_NUMBER() OVER(ORDER BY null) as rn, value FROM [dbo].[fn_Split](@sku, ',')
UNION
SELECT 2+(row_number() OVER(ORDER BY null)) as rn, value FROM [dbo].[fn_Split](@qty, ',')
)
INSERT INTO #temp
SELECT c1.value,c2.value
FROM cte c1
INNER JOIN cte c2 ON c2.rn = c1.rn+1 AND c1.rn IN (1,3) AND c2.rn IN (2,4)
fn_Split函数需要返回每个值的顺序位置,以便可以关联单独的列表。下面是使用派生表子查询的示例。您也可以使用CTE或交叉应用
INSERT INTO #temp (sku,qty)
SELECT
sku.value
, qty.value
FROM (SELECT ordinal_position, value FROM [dbo].[fn_Split](@sku, ',') AS sku
JOIN (SELECT ordinal_position, value FROM [dbo].[fn_Split](@qty, ',') AS qty ON
sku.ordinal_position = qty.ordinal_position;
假设值在每个字符串中不重复,并且分割函数不返回位置,则可以执行以下操作:
with s as (
select value,
row_number() over (order by (select null)) as pos
from dbo.fn_Split(@sku, ',')
),
q as (
select value,
row_number() over (order by (select null)) as pos
from dbo.fn_Split(@qty, ',')
)
insert into #temp (sku,qty)
select s.value, q.value
from s join
q
on s.pos = q.pos;
以下CTE可能在没有这些假设的情况下工作——但由于排序不稳定,代码不能保证工作:
替代解决方案不使用
fn\u split()
。他们会使用递归CTE或XML。拆分函数的输出是什么?
with s as (
select value,
row_number() over (order by charindex(value, @sku)) as pos
from dbo.fn_Split(@sku, ',')
),
q as (
select value,
row_number() over (order by charindex(value, @qty)) as pos
from dbo.fn_Split(@qty, ',')
)