不使用存储过程的表值参数

6

我发现网上所有的示例都是使用存储过程需要表值参数。我记得过去曾经在没有使用存储过程的情况下完成这个操作。这种做法是否可行?

这段代码一直报错,提示类型未指定。

SqlCommand cmd = new SqlCommand(@"
        UPDATE t1
        SET t1.ScheduledStartUTC = t2.ScheduledStartUTC
        FROM ScheduleTickets AS t1
            INNER JOIN @SetScheduledStart AS t2 ON t1.ScheduleId = t2.ScheduleId AND t1.PatchSessionId  = t2.PatchSessionId 
    ", c);
cmd.Parameters.Add("@SetScheduledStart", SqlDbType.Structured).Value = SetScheduleTicketsDateDT;
cmd.ExecuteNonQuery();

8
如果您正在使用TVP(表值参数)的话,如果还要使用SqlDbType.Structured,那么您也需要设置TypeName属性。而且,无论如何都必须先创建这种类型,如果您要这样做的话,是无法绕开这个步骤的。 - Jeroen Mostert
2
好的,我找到了如何指定TypeName的方法:cmd.Parameters["@SetScheduledStart"].TypeName = "dbo.tvpUpdateScheduledStart"; - Connie DeCinko CS
1个回答

1

在这里,您可以找到如何在不使用存储过程的情况下使用它的方法:将表值参数传递给参数化的SQL语句

基本上,它需要您执行以下操作:

  1. 事先在服务器上创建类型为 dbo.tvpUpdateScheduledStart 的表。
  2. SqlParameterTypeName 属性中指定此类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接