【问题标题】:Table-Valued Parameter without using a stored procedure不使用存储过程的表值参数
【发布时间】:2018-03-19 14:52:50
【问题描述】:

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

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

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

【问题讨论】:

  • 那是因为如果您将SqlDbType.Structured 用于TVP,您还需要设置TypeName 属性。 (如果这就是你想要的,你不能先创建这种类型。)
  • 好的,我找到了如何指定TypeName:cmd.Parameters["@SetScheduledStart"].TypeName = "dbo.tvpUpdateScheduledStart";

标签: c# sql .net sql-server sql-server-2016


【解决方案1】:

这里你可以找到如何在没有存储过程的情况下使用它:Passing a Table-Valued Parameter to a Parameterized SQL Statement

基本上,它要求您:

  1. CREATE TYPE dbo.tvpUpdateScheduledStart AS TABLE (ScheduleId int, PatchSessionId int) 事先在服务器上。
  2. SqlParameterTypeName 属性中指定此类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2019-01-20
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多