SQL Server 2005中的数据验证存储过程

时间:2013-12-18 20:13:53

标签: sql-server-2005 stored-procedures validation

我想在存储过程参数中获取出生日期值,并在1910年和当前年份-18岁之后验证/过滤它。如果不是那么我想传递/插入空值。这是我的存储过程,没有任何验证:

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)

1 个答案:

答案 0 :(得分: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岁的人获取null。对于年龄小于18岁的人,此函数返回null。如果你想要它的另一种方式只是改变&lt;在这种情况下使用&gt; = @DOB < DATEADD(yyyy, -18, getdate())