Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用存储过程的表值参数_C#_Sql_.net_Sql Server_Sql Server 2016 - Fatal编程技术网

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

C# 不使用存储过程的表值参数,c#,sql,.net,sql-server,sql-server-2016,C#,Sql,.net,Sql Server,Sql Server 2016,我在网上找到的似乎都是需要使用存储过程的表值参数示例。我记得过去在没有存储过程的情况下这样做。可能吗 此代码不断抛出有关未指定类型的错误 SqlCommand cmd = new SqlCommand(@" UPDATE t1 SET t1.ScheduledStartUTC = t2.ScheduledStartUTC FROM ScheduleTickets AS t1 INNER JOIN @SetScheduledS

我在网上找到的似乎都是需要使用存储过程的表值参数示例。我记得过去在没有存储过程的情况下这样做。可能吗

此代码不断抛出有关未指定类型的错误

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();

在这里,您可以找到如何在不使用存储过程的情况下使用它:

基本上,它要求您:

  • 预先在服务器上创建类型dbo.tvpudatescheduledstar作为表(ScheduleId int,PatchSessionId int)
  • SqlParameter
    TypeName
    属性中指定此类型

  • 这是因为如果使用TVP的
    SqlDbType.Structured
    ,还需要设置
    TypeName
    属性。(如果你想先创建这个类型的话,你就不能绕开它。)好的,我找到了如何指定TypeName:cmd.Parameters[“@SetScheduledStart”].TypeName=“dbo.tvpDateScheduledStart”;