1

我有一个存储过程根据不同的参数返回相同的列。

例如;

if name is not null
select a,b,c,d,e,f
from table1, table2, table3
where .....

if age is not null
select a,b,c,d,e,f
from table1, table2, table3,table4
where .....

if city is not null
select a,b,c,d,e,f
from table1,table3,table5
where .....

问题是当我想添加/省略列时,我需要为每个选择执行此操作。

有什么方法可以保留一次列列表并将其用于不同的 where 条件?

4

2 回答 2

2

您可以使用动态 SQL

DECLARE @sql NVARCHAR(4000)
SET @sql = '
select a,b,c,d,e,f
from table1,table3,table5
where 1=1 '

IF @name IS NOT NULL
  SET @sql = @sql + ' AND name = ' + @city
IF @age IS NOT NULL
  SET @sql = @sql + ' AND age = ' + @age
IF @city IS NOT NULL
  SET @sql = @sql + ' AND city = ' + @city


EXEC sp_executesql @sql
于 2013-07-05T16:01:46.063 回答
0

尝试这个

SELECT -- select list here
.....
WHERE
   name= CASE WHEN @name IS NULL THEN name ELSE @name END  
   AND age= CASE WHEN @age IS NULL THEN age ELSE @age END  
   AND city= CASE WHEN @city IS NULL THEN city ELSE @city END 
于 2013-07-05T16:39:48.317 回答