SQL Server 2005 Express中这两行之间有什么区别?
DATEADD(d, 0, DATEDIFF(d, 0, @Today));
和
DATEADD(d, DATEDIFF(d, 0, @Today), 0);
除了使该陈述在随机时间失败之外:
DECLARE @DateSrc DATETIME;
-- Chop off the time part:
SET @DateSrc = DATEADD(d, 0, DATEDIFF(d, 0, @Today));
INSERT INTO dbo.SeqNo(MyGUID, TheDay, LastNo)
SELECT @MyGUID, @DateSrc, 0
WHERE NOT EXISTS (
SELECT 1 FROM dbo.SeqNo AS sn
WHERE sn.MyGUID = @MyGUID AND sn.TheDay = @DateSrc
);
答案 0 :(得分:0)
它们都会产生相同的结果,但第二种是更好的格式,因为它适用于其他间隔(小时,月,年等)而第一种不会。
答案 1 :(得分:0)
语法为:DATEADD(datepart,number,date)
第1行: DATEADD(d,0,DATEDIFF(d,0,@ Today));
第2行: DATEADD(d,DATEDIFF(d,0,@ Today),0);
所以答案是数字解析为int(第2行),date解析为datetime(第1行) - 这就是差异。
答案 2 :(得分:0)
问题是并发问题。
存储过程的更改现在已经生产了几天而没有问题;一个有趣的解决方案。显然两个版本都有效。
但是,我只是再次检查了代码,它检查了应用程序的单个实例,并在此存储过程调用之后移动到了该代码。 Arhhgg!并发问题。
对不起,请再次感谢您的帮助。
PS。只有一件有趣的事情......为什么我不能按照上面的评论重现SQL Server Management Studio中的并发问题?与新的DateAdd格式完美交错。