我的存储过程有以下select语句:
select Name,Holiday from tblNames where ID = @ID and DATENAME(YEAR, GETDATE()) = @Year
执行语句时出现错误
"将数据类型int转换为nvarchar时出错。"
如何将@Year
参数转换为正确的年份?
答案 0 :(得分:2)
datename
函数的返回类型为nvarchar
,您需要返回整数值的datepart
函数,因此请更改为DATEPART(YEAR, GETDATE())
。
datename
是用于获取月份或工作日名称的内容。
或者您可以使用year(getdate())
函数代替评论中提到的Gordon L.
答案 1 :(得分:0)
我建议您从修复特定错误消息切换回原始问题。您的表中有一个日期,需要按范围过滤。所以只需向服务器提供范围界限。这也将避免存储数据的任何转换。为避免尾部时间问题,您可以将'23:59:59.997'附加到范围的上限或(我的建议)提供下一个日期并按<
而不是<=
进行比较
set @startdate = ...
set @enddate = dateadd(dd, 1, ...)
select *
from mytable
where t.date >= @startdate and t.date < @enddate
复杂的转化可能导致无法使用适当的索引。如果你可以转换你的参数并为服务器提供准备好的值 - 努力这样做。