*/
在我们使用存储过程的时候,有时为了组合查询条件,不得不使用动态查询。比如下面的代码:

[原创]把SQL的动态查询改成SQL查询create proc usp_search
[原创]把SQL的动态查询改成SQL查询
@city int
[原创]把SQL的动态查询改成SQL查询
as
[原创]把SQL的动态查询改成SQL查询
begin
[原创]把SQL的动态查询改成SQL查询    
declare @sql varchar(8000)
[原创]把SQL的动态查询改成SQL查询    
set @sql = N'select * from TestTable where 1=1 '
[原创]把SQL的动态查询改成SQL查询    
if(@city <> -1)
[原创]把SQL的动态查询改成SQL查询        
set @sql = @sql + ' and cityId = @city '
[原创]把SQL的动态查询改成SQL查询    
exec sp_execute_sql @sql, N'@city int'@city
[原创]把SQL的动态查询改成SQL查询
end
[原创]把SQL的动态查询改成SQL查询
go

      如果我们不用动态SQL,则可以改成下面的存储过程:

[原创]把SQL的动态查询改成SQL查询create proc usp_search
[原创]把SQL的动态查询改成SQL查询
@city int
[原创]把SQL的动态查询改成SQL查询
as
[原创]把SQL的动态查询改成SQL查询
begin
[原创]把SQL的动态查询改成SQL查询    select * from TestTable where 1=1 and (@city = -1 or cityId = @city)
[原创]把SQL的动态查询改成SQL查询
end
[原创]把SQL的动态查询改成SQL查询
go
     

相关文章: