我正在使用此存储过程基于两个值尝试SELECT
行:
ALTER PROCEDURE [dbo].[MYSelect]
-- Parameters with default values
@MitarbeiterId AS int,
@Wann AS datetime2(7)
AS
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT *
FROM [Plan]
WHERE RefMitarbeiterId = @MitarbeiterId
AND Jahr <= YEAR(@Wann)
AND Monat <= MONTH(@Wann)
AND Abgeschlossen = 0
问题在于以下部分:
AND Jahr <= YEAR(@Wann)
AND Monat <= MONTH(@Wann)
我不知道为什么这部分会导致(语法)问题。包含这些行,使用MSSQL Studio,我收到错误unable to convert DateTime to Integer
。删除这些返回结果并且没有语法错误。我在其他地方使用YEAR()
和MONTH()
,所以我很困惑为什么会出现问题。
这是Plan
表:
答案 0 :(得分:1)
条件
AND Jahr <= YEAR(@Wann)
AND Monat <= MONTH(@Wann)
将条件分为年和月。
它并不意味着年份和月份小于参数,但年份小于或等于参数年份和月份小于或等于月份参数。
使用今天(2014-06-30)作为参数,您的查询将返回过去和当年Monat在1到6之间的每一行:例如,2013年12月的行将不会返回。
要获取参数日期之前的所有行,您需要将条件更改为
AND ((Jahr = YEAR(@Wann) AND Monat <= MONTH(@Wann))
OR Jahr < YEAR(@Wann))
答案 1 :(得分:0)
测试了运行此程序的不同方法后,
我现在认为如果你在 SQL Server Manangement Studio中使用带有日期时间参数的视图
因为我测试了
EXEC
效果很好
然后删除了我的参数
这会返回一个错误,告诉我它无法将'01.07.2014 00:00:00'
转换为日期时间,但会返回正确的行
如果我现在再次使用我的参数并添加我的值
我得到一个异常,告诉我同样的想法,如上面的错误,所以我必须删除'
然后我得到unable to convert DateTime to Integer
这是我认为的错误