存储过程中的表值参数有哪些缺点?

5
我曾与不同版本的MS SQL Server一起工作,包括2000、2005、2008、R2以及(某些)Denali。我从未像使用存储过程中的表值参数这种新特性那样感到兴奋。我也进行C#开发,并且很喜欢TVP,我使用它来最小化前端应用程序对数据库调用的数量。
现在我的真正问题是,使用表值参数有哪些缺点?它几乎太好了,让人有些难以置信。
请分享你的想法。此外,我不希望深入使用它后不得不更改。

1
除了仅适用于 SQL Server 2008 及更新版本之外,没有别的。 - marc_s
这可能会对您感兴趣。http://www.sommarskog.se/arrays-in-sql-2008.html - Mikael Eriksson
它们是只读的,很多人不喜欢这样。此外,Mikael发布的Erland文章中有关于TVP的一些好信息。 - Aaron Bertrand
谢谢大家的回复。我确实了解只读和1000行性能的限制,但我的理解是与TVP限制相比,单个往返到数据库的成本更高? - darwindeeds
1个回答

5

表值参数实际上有几个实用的缺点。

优势

  • 在频繁使用时进行缓存
  • 非常高效地促进批量插入
  • 减少与服务器的往返次数

缺点:

  • SQL Server不会维护有关TVP列的统计信息
  • 只读
  • 不能用作“选择到”或“插入执行”语句的目标
  • 仅限于Sql Server 2008及以上版本

参考资料


另一个缺点是缺乏更改类型定义的可能性。如果您创建了它,它将保持不变,直到您删除它,但要删除它,您必须删除所有引用该类型的对象,即使用该类型的所有存储过程。 - Slawomir Brys

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