当对返回的结果使用 smalldatetime 约束执行以下操作时,我得到零结果:
Execute sp_proc @DateOfBirth = '01/01/1900'
或者
Execute sp_proc @DateOfBirth = '1900-01-01'
但是,当突然使用以下 varchar 参数时,我得到了对应于 2000 年 1 月 1 日的结果。 smalldatetime 隐式转换是否不适用于 mm/dd/YYYY 日期并且仅适用于 mm/dd/YY 日期?
Execute sp_proc @DateOfBirth = '01/01/00'
这将返回 2000 年 1 月 1 日生日的所有结果!
CREATE PROCEDURE [dbo].[sp_proc]
-- Add the parameters for the stored procedure here
@DateOfBirth SmallDateTime = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT *
FROM
view_People
WHERE
FirstName LIKE '%' + IsNull(@FName ,FirstName) + '%'
AND
LastName LIKE '%' + IsNull(@LName,LastName) + '%'
AND
DOB = IsNull(@DateOfBirth,DOB)
AND
SSN = IsNull(@SSN,SSN)