Параметры SQL Sproc: установка значения даты по умолчанию - PullRequest
1 голос
/ 01 марта 2010

Я пытаюсь создать хранимую процедуру, которая будет использоваться для отчета, и я хочу, чтобы два параметра даты имели значение ПО УМОЛЧАНИЮ для сегодняшней даты и на 1 месяц раньше.

Является ли приведенный ниже правильный способ сделать это? Я читал в другом месте, что я должен использовать COALESCE ... ( СМОТРИТЕ ЗДЕСЬ ) Это сложная производственная система, поэтому я хотел проверить еще раз, прежде чем идти вперед.

CREATE PROCEDURE spCaseNoteReport 
-- Add the parameters for the stored procedure here
@ContactStartDate DateTime = null,
@ContactEndDate DateTime = null
AS
IF @ContactStartDate is null
SET @ContactStartDate = dateadd(m,-1, CONVERT(date, GETDATE()))
IF @ContactEndDate is null
SET @ContactEndDate = CONVERT(date, GETDATE())
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT (id.LastName + ', ' + id.FirstName) AS 'MemberName'
      ,c.ContactDate
      ,Li.ItemDescription AS 'Location'
      ,c.PresentAtContact
      ,c.ContactDetails   
      ,c.InsertUser
      ,c.TimeSpentUnits

FROM dbo.tblCaseNotes c
    inner join dbo.tblIdentificationMap id
        on c.PersonID = id.PersonID
    left outer join dbo.tblCaseNoteContactLocation L
        on c.Casenoteid = L.Casenoteid
            inner join dbo.tblCaseNotesMaintItem Li
                on L.ContactLocationID = Li.ItemID

WHERE c.ContactDate BETWEEN @ContactStartDate AND @ContactEndDate

ORDER BY MemberName, c.ContactDate, c.InsertUser

END


1011, продолжение * * Поэтому, когда я действительно попытался запустить CREATE PROCEDURE для этого, я получаю следующие ошибки -> Msg 243, Level 16, State 1, Procedure spCaseNoteReport, Line 12 Type date is not a defined system type. Msg 243, Level 16, State 1, Procedure spCaseNoteReport, Line 14 Type date is not a defined system type.

1 Ответ

3 голосов
/ 01 марта 2010

Ничего плохого в этом подходе. Я использую это сам.

Значением параметров по умолчанию могут быть только константы или udfs, поэтому альтернативой является использование udfs, что, честно говоря, на самом деле не помогает.

Редактировать: лучший способ удалить компонент времени из datetime

DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

См. Этот превосходный SO Q + A «Самый эффективный способ в SQL Server получить дату от даты + время?» (не мое!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...