1
1
正如亚历山大所说,这要看情况而定。我不会在沙子上画关于行数的硬线,因为它也可能取决于数据类型,因此也取决于每行的大小。在您的环境中,其中一个比另一个更有意义,这取决于几个因素,而不仅仅是数据的大小,包括访问模式、性能对重新编译的敏感性、您的硬件等。 有一种常见的误解是@table变量仅在内存中,不产生I/O,不使用tempdb等。在某些孤立的情况下,有些是正确的,但这不是您可以或应该依赖的。 @table变量的一些其他限制可能会阻止您使用它们,即使是对于小数据集:
|
2
0
这实际上取决于数据量。如果您使用的记录少于100条,那么
编辑:不是
坏的
使用
|
3
0
一般来说,如果可能的话,你应该选择相反的。这取决于您是需要存储一组项还是只存储结果值。
对于参数,表变量对于函数的返回集很有用。无法从函数返回临时表。根据手头的任务,使用函数可以更容易地封装工作的特定部分。您可能会发现某些存储过程所做的工作更适合于函数,尤其是在重用但不修改结果的情况下。 最后,如果只需要在存储过程工作的中间存储一次结果,请尝试CTEs。这些通常会击败表变量和临时表,因为SQLServer可以更好地决定如何存储这些数据。此外,在语法方面,它可能会使您的声明更清晰。 Using Common-Table Expressions @ MSDN 编辑:(关于临时表) 查询会话结束时,本地临时表将消失,这在将来可能是一个不确定的时间量。在连接关闭且没有其他用户使用该表之前,全局临时表不会消失,甚至可能更长。在这两种情况下,最好在过程退出时删除临时表(不再需要),以避免占用内存和其他资源。
|
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
hud · 执行存储过程会导致错误 8 年前 |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |