簡體   English   中英

如何傳遞數組 <List> 到存儲過程

[英]How to pass an array of <List> to a stored procedure

我在C#中有一個ClaimData列表,它有三個項目Date,Type和Description在此可以有多個行,如下所示,

ClaimData

Date         Type      Description

01/02/2012  "Medical" "Its a medical"
05/02/2013  "Theft"   "Its a Theft"
01/02/2014  "Test"    "Its a Test"

我想將全部數據一次性傳遞給存儲過程到sql服務器,以便減少數據庫命中率。 我寫了存儲過程,可以遍歷此列表並將它們插入表中。

如何通過操縱列表對象來實現可以將其作為參數傳遞給存儲過程?

您需要做幾件事來實現這一點,因為您的參數獲取了多個值,因此您需要創建一個表類型並使存儲過程接受該類型的參數。

由於您要傳遞TABLE作為參數,因此需要創建TABLE TYPE,如下所示

桌子類型

CREATE TYPE dbo.ClaimData AS TABLE 
 (
    [Date]         DATE
    [Type]         VARCHAR(50)
    [Description]  VARCHAR(100)
  )
 GO

存儲過程以接受該類型參數

 CREATE PROCEDURE mainValues 
 @TableParam ClaimData READONLY   --<-- Accepts a parameter of that type 
 AS                                  -- Note it is ReadOnly 
 BEGIN
    SET NOCOUNT ON;

  --Temp table to store the passed values 
  -- since the passed parameter is only Read only and you
  -- cannot make any changes to the parameter so if you need to
  -- manipulate the data inside parameter you will need to get it
  -- into a Table vaiable.


  -- Declare a Table variable
  DECLARE @tmp_values table(
          [Date]         DATE
          [Type]         VARCHAR(50)
          [Description]  VARCHAR(100)
                            );   

   --Get values into that Table variable 
   INSERT INTO @tmp_values ([Date],[Type],[Description])
   SELECT [Date],[Type],[Description] FROM @TableParam

   -- Do other cool stuff with your passed data 

   SELECT * FROM @tmp_values  --<-- For testing purpose
END

執行程序

聲明該類型的變量,並使用您的值填充它。

 DECLARE @Table ClaimData(      --<-- Declare a variable of your type
          [Date]         DATE
          [Type]         VARCHAR(50)
          [Description]  VARCHAR(100)
                            ); 
 -- Populate the variable
   INSERT INTO @Table ([Date],[Type],[Description])
   SELECT [Date],[Type],[Description] FROM Source_Table

EXECUTE mainValues @Table   --<-- Stored Procedure Executed 

我使用字符串生成器和分隔符'|'將所有三列作為字符串發送

    DateString = '01/02/2012|05/02/2013|01/02/2014'
    TypeString = 'Medical|Theft|Test'
    DescString = "Its a medical|..."

在數據庫方面,我使用了一個函數來分隔這些字符串,並將所有這些值插入到臨時表中。 這解決了我的問題。

暫無
暫無

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

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