注意:下面显示的患者数据是我编造的“虚拟”数据。这不是实际患者的实际信息。
我有一个函数,其中包含以下转换:
Declare @bdate date
set @bdate = CONVERT ( date , left(@dob,8) , 112 )
如果我只是在查询窗口中运行它,它会很好地转换日期
select CONVERT(date, left('19900101', 8), 112) //returns a good date
但是,如果我在 Visual Studio 中单步执行具有相同代码的标量函数,则会出现错误...
Declare @bdate date
set @bdate = CONVERT ( date , left(@pidPatientDob,8) , 112 )
抛出...
运行 [dbo].[getAgeAtTestDate] (@obxTestDate = '20120101', @pidPatientDob = '19900101')。
从字符串转换日期和/或时间时转换失败。不存在数据时尝试读取无效。
为什么它在查询窗口中起作用而在函数中不起作用?似乎参数在函数中被正确填充。
这是函数的全文,它返回null(我认为是因为错误)
ALTER FUNCTION [dbo].[getAgeAtTestDate]
(
-- Add the parameters for the function here
@obxTestDate as nvarchar(50), @pidPatientDob as nvarchar(50)
)
RETURNS int
AS
BEGIN
Declare @bdate date
set @bdate = CONVERT ( date , left(@pidPatientDob,8) , 112 )
Declare @testDate date
set @testDate = CONVERT ( date , left(@testDate,8) , 112 )
-- Return the result of the function
RETURN datediff(mm, @testDate, @bdate)
END