动态存储过程从3个不同的表中提取数据

时间:2015-11-25 06:43:34

标签: tsql

我有三个不同的SQL查询,我想在单个存储过程中转换它。 根据传递参数,我们可以得到第一,第二或第三的输出。

第一次查询:

SELECT NAME, ADDRESS, CITY FROM LOCATION WHERE REGION <> 3

第二次查询:

SELECT NAME, ADDRESS, CITY FROM LOCATION WHERE REGION = 3

第三次查询:

SELECT NAME, OFFICE_ADDRESS, RES_ADDRESS,PROPERTY_TAX FROM COUNTRY WHERE REGION = 'ZUR'

愿任何人帮助我如何实现这一目标。

非常感谢

1 个答案:

答案 0 :(得分:0)

对于前两个选择,有必要制作IF语句。但不是最后因为字段数不同。

即使LOCATIONCOUNTRY上的大多数列具有相同的含义,也会增加维护问题并增加代码的复杂性。

为了同样的目的,使用多个表也是设计不良的症状。

IF (@FLAG = 1)
BEGIN

   SELECT NAME, ADDRESS, CITY FROM LOCATION WHERE REGION != 3

END
ELSE
BEGIN

   SELECT NAME, ADDRESS, CITY FROM LOCATION WHERE REGION = 3

END

创建另一个方法/ SP来获取COUNTRY

上的数据

注意:对于最后一个MS SQL Server版本,IF是提高性能的推荐方法。同样使用CASE语句可能意味着需要为表中的每一行评估REGION列。

注意:了解参数嗅探以避免它。弄乱SP行为的条件是获取参数嗅探问题的好方法。