Hi,
The following stored procedure (SP) is using a dynamic sql to build the query.
How can this be written using a standard sql. i.e. NOT dynamically being built.
Initially I thought I can have something like the following query but it does not seem to be working for when the where caluse parameters are not passed.
So I ended up using the dynamic sql as it returns the correct data.
Can you see how the SP can be altered please
Thanks
------------------------this query does not return the correct data where the where parameters are not passed.------------
select
*
from
tbl_Management
where
([Year] is null or [Year] = @Year)
AND
(YearPeriod is null or YearPeriod = @YearPeriod)
AND
(AreaCode is null or AreaCode = @AreaCode)
---------------------------------------------------------------
create procedure usp_PatientManagementAdminGet
@Year int = null,
@YearPeriod int = null,
@AreaCode varchar(3) = null
as
declare @sql varchar(1000)
set @sql = 'select'
set @sql = @sql + ' ID'
set @sql = @sql + ' ,AreaCode'
set @sql = @sql + ' ,Year'
set @sql = @sql + ' ,YearPeriod'
set @sql = @sql + ' ,A1=A2+A3'
set @sql = @sql + ' ,A2,A3'
set @sql = @sql + ' ,B1=B2+B3'
set @sql = @sql + ' ,X1=convert(int, ((B2+B3)*1.0/(A2+A3))*100)'
set @sql = @sql + ' from'
set @sql = @sql + ' tbl_Management'
set @sql = @sql + ' where'
if (@Year > 0)
begin
set @sql = @sql + ' [Year] = ' + convert(varchar(4), @Year)
set @sql = @sql + ' AND'
end
if (@YearPeriod > 0)
begin
set @sql = @sql + ' YearPeriod = ' + convert(varchar(2), @YearPeriod)
set @sql = @sql + ' AND'
end
if (@ProgrammeAreaCode is not null)
begin
set @sql = @sql + ' AreaCode = ''' + convert(varchar(3), @AreaCode) + ''''
set @sql = @sql + ' AND'
end
--trim off the last AND...
set @sql = left(@sql, len(@sql) - 3)
exec sp_sqlexec @sql

stop using dynamic sql
LamboJay
Thanks
jennitro
Close, but what you want is to check to see if the parameter is null (assuming you don't have null values in the table, then you will want to revise your query.)
create procedure usp_PatientManagementAdminGet
@Year int = null,
@YearPeriod int = null,
@AreaCode varchar(3) = null
as
select
*
from
tbl_Management
where
(@Year is null or [Year] = @Year)
AND
(@YearPeriod is null or YearPeriod = @YearPeriod)
AND
(@AreaCode is null or AreaCode = @AreaCode)
GO
For an excellent article covering the ins/outs/ups/downs of dynamic SQL, this article is awesome: http://www.sommarskog.se/dyn-search.html