1
选中所有行或特定行我用下面的存储过程来自同一个存储过程
CREATE PROCEDURE [dbo].[GetStates]
(
@p_StateId int = NULL
)
AS
SELECT
StateId AS CodeID,
StateName AS CodeName
FROM
States
WHERE
StateID = COALESCE(@p_StateID, StateID)
如果@p_StateId
为空,则返回所有行,如果没有它,如果StateId
比赛返回一行。
我的问题是,做一个更优雅的方式来实现这与SQL Server 2008存在?
演示上sqlfiddle:[链接](http://www.sqlfiddle.com/#!6/5e30f/8) – dasblinkenlight
谢谢你你的答案是dasblinkenlight,那么使用Coalesce函数可以更有效吗?我在问最初的问题,因为我刚刚学习了合并语句来运行插入/更新,并想知道是否有类似的方法来使我的选择更有效。 – Mario
@Mario我更喜欢显式'IS NULL'的方式,以获得更好的可读性,而不是任何性能增益。尽管查询优化器更有可能通过明确的'NULL'检查来发现与'COALESCE'相比的情况,很可能性能将保持不变。如果'States'代表美国的状态,也就是说,如果它是一个50行的表格,则全表扫描可能与索引查找效率一样高,因为表格非常小。您可能想查看查询计划以查看优化器正在执行的操作。 – dasblinkenlight