【发布时间】:2013-06-20 13:26:27
【问题描述】:
在临时查询中使用 Select ColumnName 更好,但是在存储过程中保存在计划指南中之后是否重要?
【问题讨论】:
-
是的! ! 这很重要!我建议总是明确指定您想要的列。否则:如果某人(DBA 或其他开发人员)突然将三个 BLOB 列添加到您的表中会发生什么?您使用
SELECT *的存储过程将获取所有这些列 - 即使您根本不需要它们。请参阅Bad habits to kick: using SELECT * / omit the column list 进行精彩讨论 -
如果有人愚蠢到将 3 个 BLOB 列添加到任何没有它们也能正常工作的表中,让他们陷入困境......或者让他们使用水平分区(如果你是一个好撒玛利亚人)。
-
@Serge - 什么?每次需要添加新的 BLOB 列时,您都会创建一个新表,以满足可能使用过
*的人的需求? -
@Martin 差不多,因为 BLOB 几乎总是意味着您现在访问的“可选额外数据”,然后添加到您经常访问的“关键紧凑行”中。
-
@Serge 期望别人总是做“正确”的事情本身就是错误的。你应该防御性地编码。就像开车一样……您可以通过假设其他人会做错事来避免事故。我会使用“select *”来自我自己的临时表、表变量或 CTE。或者,如果我明确需要表中的所有列,即使表发生更改,例如将表行归档为 XML 时。
标签: sql sql-server database tsql stored-procedures