【发布时间】:2018-12-06 11:41:29
【问题描述】:
这是我的代码示例:
SET @variable_out =
'Report: '
+ CASE WHEN (SELECT name FROM person WITH(NOLOCK) WHERE person_id = @person_id) != ''
THEN 'Name: ' + (SELECT name FROM person WITH(NOLOCK) WHERE person_id = @person_id) + CHAR(13)+CHAR(10)
ELSE 'Name: not found' + CHAR(13)+CHAR(10)
END
+ CASE WHEN (SELECT home_phone FROM person WITH(NOLOCK) WHERE person_id = @person_id) != ''
THEN 'Phone #: ' + (SELECT home_phone FROM person WITH(NOLOCK) WHERE person_id = @person_id) + CHAR(13)+CHAR(10)
ELSE 'Phone #: not found' + CHAR(13)+CHAR(10)
END
等等……
如您所见,我对正在构建的变量的每个 CASE WHENE... 重复执行两次选择,我希望将其折叠为每行仅选择一次。
我知道的唯一解决方案是为 CASE WHEN... 创建一个唯一变量,预先运行所有选择,然后如果变量不为空,将它们连接到 @variable_out。
有没有更聪明的方法来做到这一点?
【问题讨论】:
标签: sql sql-server optimization select