2013-12-18 55 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语句应该变成:

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

注:从你的回答我不明白,如果你想为18岁以上或18岁以下的人排空。这个函数对于18岁以下的人返回null。如果你wa nt它的另一种方式只是改变<与> =在这种情况下:@DOB < DATEADD(yyyy, -18, getdate())

相关问题