Visual studio 被T-SQL弄糊涂了:在查询窗口中运行查询时,作为标量函数的一部分,输出不同

Visual studio 被T-SQL弄糊涂了:在查询窗口中运行查询时,作为标量函数的一部分,输出不同,visual-studio,tsql,Visual Studio,Tsql,注意:下面显示的患者数据是我编造的“虚拟”数据。它不是实际患者的实际信息 我有一个函数,其中包含以下转换: Declare @bdate date set @bdate = CONVERT ( date , left(@dob,8) , 112 ) 如果我只是在查询窗口中运行它,它会转换日期 select CONVERT(date, left('19900101', 8), 112) //returns a good date 但是如果我在VisualStudio中单步执行一个标量函数

注意:下面显示的患者数据是我编造的“虚拟”数据。它不是实际患者的实际信息

我有一个函数,其中包含以下转换:

Declare @bdate date 
set @bdate =  CONVERT ( date , left(@dob,8) , 112 )
如果我只是在查询窗口中运行它,它会转换日期

select CONVERT(date, left('19900101', 8), 112)  //returns a good date
但是如果我在VisualStudio中单步执行一个标量函数,其中包含相同的代码,我会得到一个错误

Declare @bdate date 
set @bdate =  CONVERT ( date , left(@pidPatientDob,8) , 112 )

正在运行[dbo].[GetAgeDetectDate](@obxTestDate='20120101', @PidPatientDB='19900101')

从字符转换日期和/或时间时转换失败 一串当不存在数据时尝试读取无效

为什么它在查询窗口中工作而在函数中不工作?似乎函数中的参数已正确填充

这是函数的全文,返回null(我认为是因为错误)


您的参数名为
obxTestDate
,而不是
testDate
,因此请更改

set @testDate =  CONVERT ( date , left(@testDate,8) , 112 )
进入

事情会变得更好

作为旁注,我认为您也颠倒了
DATEDIFF
,开始日期应该在结束日期之前

RETURN datediff(mm,  @bdate, @testDate)

iaakson好吧,就这样。啊!
set @testDate =  CONVERT ( date , left(@obxTestDate,8) , 112 )
RETURN datediff(mm,  @bdate, @testDate)