Пример процедуры, которая работает с необязательными параметрами, также учтена последовательность выполнения условий в запросе where

Tsql теория > Пример процедуры, которая работает с необязательными параметрами, также учтена последовательность выполнения условий в запросе where
11.04.2013 13:45:20



Статья:

Пример процедуры, которая  работает с необязательными параметрами, также учтена последовательность выполнения  условий  в запросе where

if exists (select 1
from sysobjects
where id = object_id('spЦентрЗатрат_ПолучитьССЧ')
and type in ('P','PC'))
drop procedure spЦентрЗатрат_ПолучитьССЧ
go


CREATE PROCEDURE spЦентрЗатрат_ПолучитьССЧ
(
@ЦентрЗатрат_1C77_УИ char(9)= NULL,
@Дата_С DATETIME = NULL,
@Дата_По datetime = NULL

)

AS
DECLARE @Дата_С_int int
declare @Дата_По_int INT

IF @Дата_С IS NOT null
set @Дата_С_int=CONVERT(int,LEFT(CONVERT(varchar(8), @Дата_С,112),6)+'01')
IF @Дата_По IS NOT NULL
set @Дата_По_int=CONVERT(int,LEFT(CONVERT(varchar(8), @Дата_По,112),6)+'01')

SELECT
CONVERT(datetime,SUBSTRING(CONVERT(varchar(9),h.Период_ID),1,4)+'-'+SUBSTRING(CONVERT(varchar(9),h.Период_ID),5,2)+'-01') AS [Период]
,h2.[1C77_УИ] AS [ЦентрЗатрат_1C77_УИ]
,h2.[1C77_Код] AS [ЦентрЗатрат_1C77_Код]
,h2.[Наименование] AS [ЦентрЗатрат]
-- ,convert(decimal(10,2),sum(h.[Рабочее_Время_Дней])) AS [Рабочее_Время_Дней]
,convert(decimal(10,2),sum(h.[Среднесписочное])) AS [Среднесписочнаячисленность]
FROM [DWH_Store].[dbo].[Факт_Среднесписочная_численность]h (nolock)
JOIN DWH_Datamart.dbo.tblФС_ЦентрыЗатрат h2 (NOLOCK)
ON h.ЦентрЗатрат_УИ=DWH_Datamart.dbo.Convert36To10(h2.[1C77_УИ])
WHERE ((@ЦентрЗатрат_1C77_УИ IS NOT NULL and h2.[1C77_УИ]=@ЦентрЗатрат_1C77_УИ) OR (@ЦентрЗатрат_1C77_УИ IS NULL))
AND (h.[Период_ID]>=isnull(@Дата_С_int,19450101) AND h.[Период_ID]<= isnull(@Дата_По_int,21000101) )


GROUP BY h2.[1C77_УИ] ,h2.[1C77_Код],h2.[Наименование],h.Период_ID



Go