将一组GUID传递给C#集合中的存储过程

时间:2014-07-01 09:01:50

标签: sql-server

我有一个存储过程,我想用它在父表中创建一行[Test] 和子表中的多行[TestQuestion]。父表和子表都具有标识数据类型的主键。以下是子表的外观,删除了一些不相关的列:

CREATE TABLE [dbo].[TestQuestion] (
    [TestQuestionId] INT            IDENTITY (1, 1) NOT NULL,
    [TestId]         INT            NOT NULL,
    [QuestionNumber] INT            NOT NULL  
);

插入父表很容易,因为所有参数都提供给SP,我只是将它们映射到插入并执行插入。但子数据表ID是作为参数@qidsJSON给出的,其中包含JSON格式的ID,如下所示:

parameterList.Add(new SqlParameter ("@qidsJSON", qids.ToJSONString()));

["3CEFF956-BF61-419E-8FB2-9D6A1B75B909","63E75A2D-9F45-43CC-B706-D9890A22577D"]

有没有办法可以使用TransactSQL从@qidsJSON和{{1}}获取数据 让它在TestQuestion表中为参数中出现的每个GUID插入一行?

或者是否有另一种方法可以在包含多个GUID的参数中传递数据?我正在使用 C#来从C#List中制定输入数据,这样我就可以以任何最容易使用的形式为输入参数创建数据。

1 个答案:

答案 0 :(得分:2)

您可以将Table变量参数用于存储过程:

CREATE TYPE GuidList AS TABLE (Id UNIQUEIDENTIFIER)

CREATE PROCEDURE test 
    @Ids dbo.GuidList READONLY
AS

使用以下引用以在C#中使用表变量参数:

How to pass table value parameters to stored procedure from .net code

C# and Table Value Parameters