2013-12-18 3 views
0

Я хотел бы получить дату рождения значения в параметре хранимой процедуры и проверить/фильтровать его, если он после 1910 года и текущего года -18 лет. Если это не так, я хочу передать/вставить нулевое значение. Вот моя ХП без проверки:Проверка данных Сохраненная процедура в SQL Server 2005

ALTER PROCEDURE [dbo].[CARS_IS_WU_T_INSERT](


      @DOB       [DATETIME], 
      @SSN       [VARCHAR](9), 
      @OCCUPATION     [VARCHAR](30), 
      @PLACE_OF_ISSUANCE    [VARCHAR](30), 
      @Exception_Bit     [BIT]) 
AS 
INSERT INTO [DBO].[UA_T] 
     (
      [DOB], 
      [SSN], 
      [OCCUPATION], 
      [PLACE_OF_ISSUANCE], 
      [EXCEPTION_BIT]) 
    VALUES  (
    @DOB, 
      @SSN, 
      @OCCUPATION, 
      @PLACE_OF_ISSUANCE, 
      @Exception_Bit) 

ответ

0

Вы можете определить функцию CheckDate так:

CREATE FUNCTION [dbo].[CheckDate] 
(
    @DOB datetime 
) 
RETURNS datetime 
AS 
BEGIN 

    return case 
    when 
     ( 
      (@DOB > CONVERT(datetime, '19100101', 102)) 
      and 
      @DOB < DATEADD(yyyy, -18, getdate()) 
     ) 
     then @DOB 
     else null 
    end 
END 

тогда ваша вставка заявление должно стать:

INSERT INTO [DBO].[UA_T] 
    (
     [DOB], 
     [SSN], 
     [OCCUPATION], 
     [PLACE_OF_ISSUANCE], 
     [EXCEPTION_BIT]) 
VALUES  (
     [dbo].[CheckDate](@DOB), 
     @SSN, 
     @OCCUPATION, 
     @PLACE_OF_ISSUANCE, 
     @Exception_Bit) 

Примечание: от ваш ответ Я не понимаю, хотите ли вы получить null для людей старше 18 лет или моложе 18 лет. Эта функция возвращает значение null для людей моложе 18 лет. Если вы хотите nt это другой способ просто изменить < с> = в этом состоянии:@DOB < DATEADD(yyyy, -18, getdate())

Смежные вопросы