不使用存储过程的表值参数
Posted
技术标签:
【中文标题】不使用存储过程的表值参数【英文标题】: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";
【参考方案1】:
这里你可以找到如何在没有存储过程的情况下使用它:Passing a Table-Valued Parameter to a Parameterized SQL Statement
基本上,它要求您:
CREATE TYPE dbo.tvpUpdateScheduledStart AS TABLE (ScheduleId int, PatchSessionId int)
事先在服务器上。
在SqlParameter
的TypeName
属性中指定此类型。
【讨论】:
以上是关于不使用存储过程的表值参数的主要内容,如果未能解决你的问题,请参考以下文章
为啥需要以只读方式输入 SQL Server 存储过程的表值参数?