【发布时间】:2012-06-29 18:24:46
【问题描述】:
我目前正在编写一个存储过程,它为调用应用程序提供有效城市和州值的检索。
当提供 zip_code 时,存储过程将返回指定输入参数的所有有效城市/州组合的列表。
但是,如果 zip_code 不存在,则存储过程必须返回错误字符串 'ZipCode Wrong!'返回调用应用程序而不是空数据集。
我考虑了两种方法:
第一种方法
SELECT City, State FROM ZipCodeTable WHERE Zip = @ZipCode
IF (@@ROWCOUNT = 0)
return 'ZipCode Wrong!'
第二种方法
SELECT COALESCE(
(SELECT City, State FROM ZipCodeTable WHERE Zip=@ZipCode FOR XML PATH ('')),
(SELECT 'ZipCode Wrong!') FOR XML PATH (''))
由于此事务每秒会运行很多次,我想让它尽可能高效。从性能的角度来看,哪个更有效?另外,如果还有其他更好的方法,请随时告诉我。谢谢!
【问题讨论】:
-
您是否测试过您的第二种方法?我不认为这是有效的语法。
-
COALESCE 如何使用多列选择作为参数? sqlfiddle.com/#!6/d41d8/163
-
你为什么不想在应用程序端处理这个? id 结果为 null 或数据集为空 return
'ZipCode Wrong!' -
@TelJanini 那也行不通。它有一个多列选择和一个单列选择。 COALESCE 需要一个标量参数...
-
嗯,这似乎是 SQL Server。存储过程返回整数。我不知道他们返回字符串。
标签: sql performance select stored-procedures null