我在存储过程中声明了6个变量,并且我想将查询结果(可能最多带6条记录)存储到每个变量中。我的查询如下:
DECLARE
@Sib1 varchar(20),
@Sib2 varchar(20),
@Sib3 varchar(20),
@Sib4 varchar(20),
@Sib5 varchar(20),
@Sib6 varchar(20)
select
PC.SKU
from
Product PC
where
Parent_code in (select
Parent_code
from
Product
where
SKU =12345)
and ParentFlag <> 'p'
and SKU <> 12345
order by Parent_Child_Priority desc
我想将每个生成的SKU放在每个@SIB变量中。如果它只返回1个结果,我想将空值放入其余的@SIB变量中。
感谢。
答案 0 :(得分:2)
您可以将SKU插入带有标识列的表变量中。然后根据标识列值将变量设置为等于表中的sku。
DECLARE @Sib1 VARCHAR(20)
,@Sib2 VARCHAR(20)
,@Sib3 VARCHAR(20)
,@Sib4 VARCHAR(20)
,@Sib5 VARCHAR(20)
,@Sib6 VARCHAR(20);
DECLARE @TempTbl TABLE (
RowID INT IDENTITY
,SKU VARCHAR(20)
)
INSERT INTO @TempTbl (SKU)
select
PC.SKU
from
Product PC
where
Parent_code in (select
Parent_code
from
Product
where
SKU =12345)
and ParentFlag <> 'p'
and SKU <> 12345
order by Parent_Child_Priority desc
SELECT @Sib1 = SKU
FROM @TempTbl
WHERE RowID = 1;
SELECT @Sib2 = SKU
FROM @TempTbl
WHERE RowID = 2;
SELECT @Sib3 = SKU
FROM @TempTbl
WHERE RowID = 3;
SELECT @Sib4 = SKU
FROM @TempTbl
WHERE RowID = 4;
SELECT @Sib5 = SKU
FROM @TempTbl
WHERE RowID = 5;
SELECT @Sib6 = SKU
FROM @TempTbl
WHERE RowID = 6;
<强> 修改 强>
DECLARE @SQL VARCHAR(MAX);
SET @SQL = 'SELECT SKU, ..., sum(convert(INT, a.qty)) AS ' + @sib1 + ' FROM ...'
EXEC (@SQL);
答案 1 :(得分:1)
而是使用table variable之类的
DECLARE @MyTableVar table(
SKU int NOT NULL);
然后插入
insert into @MyTableVar(SKU)
select
PC.SKU
from
Product PC
where
Parent_code in (select
Parent_code
from
Product
where
SKU =12345)
and ParentFlag <> 'p'
and SKU <> 12345
order by Parent_Child_Priority desc;
现在您可以根据需要使用@MyTableVar
。您不需要为N
记录声明N
变量。