C# 如何使用存储过程在参数中传递多个值

C# 如何使用存储过程在参数中传递多个值,c#,sql,C#,Sql,这是我的存储过程。有人说使用TVP我可以得到我想要的输出。但我对sql还是新手。因此,请有人帮助我,如何传递多个disposeid和多个receiveid,如下所示。现在我只需要使用能够理解什么是tvp的输出,所以有人请编辑我的SP以传递其中的多个值 USE [Test] GO /****** Object: StoredProcedure [dbo].[up_Get_Customers] Script Date: 09/23/2015 19:10:23 ******

这是我的存储过程。有人说使用TVP我可以得到我想要的输出。但我对sql还是新手。因此,请有人帮助我,如何传递多个disposeid和多个receiveid,如下所示。现在我只需要使用能够理解什么是tvp的输出,所以有人请编辑我的SP以传递其中的多个值

 USE [Test]
    GO

    /****** Object:  StoredProcedure [dbo].[up_Get_Customers]    Script Date: 09/23/2015 19:10:23 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO




    ALTER PROC [dbo].[up_Get_Customers]
    (
        @DisposeId int

    )
    AS
    BEGIN

        SELECT C1.DisposeDate,C1.DisposeID,C1.ReceiveDate,C1.ReceiveID
        FROM Customers C1 
        LEFT JOIN Customers C2 ON C1.DisposeID=C1.ReceiveID 
        WHERE @DisposeId IS NULL OR (C1.DisposeID in (@DisposeId,','))
       END

    GO

嗯,这是我今天学到的新东西,通过少量的谷歌搜索,我想出了这个

TVP为TVp参数

因此,根据链接中的信息:

CREATE TYPE DisposeIdsTable AS TABLE (
    DisposeId VARCHAR(50));
GO
然后

USE [Test]
GO

/****** Object:  StoredProcedure [dbo].[up_Get_Customers]    Script Date: 09/23/2015 19:10:23 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER PROC [dbo].[up_Get_Customers]
(
    @DisposeIds DisposeIdsTable READONLY
)
AS
BEGIN

    SELECT C1.DisposeDate,C1.DisposeID,C1.ReceiveDate,C1.ReceiveID
    FROM Customers C1 
    LEFT JOIN Customers C2 ON C1.DisposeID=C1.ReceiveID 
    WHERE (SELECT COUNT(*) FROM @DisposeIds) = 0
        OR
        (C1.DisposeID IN (
            SELECT DisposeID FROM @DisposeIds
            UNION ALL
            SELECT ',')))
   END

GO
N.B.上面发布的代码根本没有经过测试,因此可能包含错误。此外,我还假设了
DisposeId
的数据类型,因此这不太可能是正确的,需要修改以适合您的数据类型。此外,我还试图保留查询的现有逻辑,不管是什么


执行存储过程时,需要声明类型为
dispeidstable
的变量,而不是当前使用的文本数据类型。然后,需要用您的ID填充该表变量。

如何创建多个disposeid和多个receiveid是什么意思?下次尝试google解决方案。试试这个谢谢@Clay
DisposeIds
设置为
READONLY