我有一个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
声明