SQL Server逐行传递表值参数

时间:2018-04-03 14:29:05

标签: sql-server

我有一个C#程序,它将数据表传递给接受某种表的存储过程。我需要将此存储过程中的行传递给一个遗留存储过程,该过程接受表行中的值 - 而不是表。

我有课:

public class CondemnedPart
{
    public DateTime HarvestDate { get; set; }
    public string HouseTag2 { get; set; }
    public byte Reason { get; set; }
    public byte Product { get; set; }
}

和相应的表值参数:

CREATE TYPE Abattoir.CondemnedPartsList AS TABLE 
(
    [UpLoadDate] [datetime] NULL,
    [HarvestDate] [date] NOT NULL,
    [Plant] [tinyint] NOT NULL,
    [Housetag2] VARCHAR(6) NOT NULL,
    Reason VARCHAR(4) NOT NULL,
    Product VARCHAR(4) NOT NULL
)

因此,在我看来,我需要遍历这里的表行,并将它们传递给遗留存储过程。这似乎不对,但我不是SQL Server专家。 我如何才能最好地将表格中的行传递给遗留存储过程(我无法改变)?

最终,我需要主机PC构建大量行,并使用SQL Server机器来处理它们。逐行调用太慢了,所以表似乎是一个好主意。每个C#数据表的单个调用。

编辑:我正在尝试将旧的存储过程调整为名为BULK_INSERT ala Show to Pass Values...的新存储过程。但它似乎并没有很好地运作

编辑2 :我将此重写为接受上述类型TVP的存储过程。但是,我不知道如何将其插入存储过程。例如

CREATE PROCEDURE [Abattoir].[Condemn_RecordScan_Bulk]
     @table AS Abattoir.CondemnedPartsList READONLY 
AS
BEGIN
    BEGIN TRY 
        BEGIN TRANSACTION

        SET NOCOUNT ON;

        DECLARE @ResolveCode TINYINT = 0;
        IF ((SELECT Housetag2 FROM @table) = '299999')
        BEGIN
            SET @HouseTag2 = NULL;
            SET @ResolveCode = NULL;
        END

发出关于我从@table声明

中选择的警告

0 个答案:

没有答案