0

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 
  );
4

3 回答 3

0

它们都会产生相同的结果,但第二种格式更好,因为它适用于其他时间间隔(小时、月、年等),而第一种则不会。

于 2013-02-09T01:16:22.833 回答
0

语法是:DATEADD (datepart , number , date )

第 1 行:DATEADD(d, 0, DATEDIFF(d, 0, @Today));

第 2 行:DATEADD(d, DATEDIFF(d, 0, @Today), 0);

所以答案是 number 解析为 int (line 2) ,而 date 解析为 datetime (line1) - 这就是区别。

于 2013-02-09T11:28:46.880 回答
0

问题是并发问题。

存储过程的更改已经在生产中几天了,没有问题;有趣的修复一个人认为。显然这两个版本都有效。

但是,我刚刚再次查看了检查应用程序单个实例的代码,并且在此存储过程调用之后将其移至。啊啊啊!并发问题。

很抱歉给您带来麻烦,再次感谢您的帮助。

附言。只是一件有趣的事情......为什么我不能按照我上面的评论在 SQL Server Management Studio 中重现并发问题?这与较新的 DateAdd 格式完美交错。

于 2013-02-15T06:15:36.010 回答