我想在存储过程参数中获取出生日期值,并在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)
答案 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())