簡體   English   中英

將列表傳遞到存儲過程

[英]Passing a list into a stored procedure

我有兩個需要插入數據庫的ID列表。 我要在這里做的是,將這兩個列表傳遞到存儲過程中,並嘗試使用while循環將其添加。 我試圖使用用戶定義的類型來定義數組,但是不知道如何將其傳遞給插入命令

CREATE TYPE [dbo].[Array] AS TABLE(
[Item] [NVARCHAR](MAX) NULL
);

這是SQL / PL:

ALTER PROCEDURE [dbo].[sp_create_order]
(@productIds AS Array READONLY, @priceIds AS Array READONLY)
AS
BEGIN
  DECLARE @i int 
  DECLARE  @n int    


set @n = count(@productIds)
set @i = 1; 

while (@i <= @n) 
BEGIN    
INSERT INTO order_detail(product_id,price_id) 
    VALUES(@productIds[i],@priceIds[i]);
set @i = @i + 1; 
END 
END 
RETURN 0

考慮更改您的類型以包括兩個對。

CREATE TYPE [dbo].[ProductPrices] AS TABLE(
[ProductId] [NVARCHAR](MAX) NULL,
[PriceId] [NVARCHAR](MAX) NULL
);

然后將您的過程更改為以下內容:

create procedure [dbo].[sp_create_order] @productPrices dbo.ProductPrices READONLY
as
begin
    insert into order_detail
    select p.ProductId,
        p.PriceId
    from @productPrices p
end

然后,您可以這樣調用過程。

declare @productPrices dbo.ProductPrices;

insert into @productPrices
values('1', '7'),
('2', '12'),
('3', '8');

exec dbo.sp_create_order @productPrices;

看起來您正在學習表值參數,應該創建一個具有兩列的表值參數,以便您可以直接插入

這是解決您當前問題的一種方法,我們可以使用ROW_NUMBER生成序列號並從兩個表中獲取行值

create PROCEDURE [dbo].[sp_create_order]
(@productIds AS Array READONLY, @priceIds AS Array READONLY)
AS
BEGIN

INSERT INTO order_detail(product_id,price_id) 
select T1.item, T2.item
FROM
(select item , ROW_NUMBER() over ( order by (select null)) as seq from @productIds) T1
join
(select item , ROW_NUMBER() over ( order by (select null)) as seq from @priceIds) T2
on T1.seq = T2.seq


END 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM