我有一个存储过程,我想用它在父表中创建一行[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中制定输入数据,这样我就可以以任何最容易使用的形式为输入参数创建数据。
答案 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