0

SQL Server 2005 Express のこれら 2 行の違いは何ですか?

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

どちらも同じ結果を生成しますが、他の間隔 (時間、月、年など) で機能し、最初の形式は機能しないため、2 番目の形式の方が適しています。

于 2013-02-09T01:16:22.833 に答える
0

問題は並行性の問題でした。

ストアド プロシージャの変更は現在、数日間実稼働しており、問題はありません。面白い修正だと思います。どうやら両方のバージョンが動作するようです。

しかし、アプリケーションの 1 つのインスタンスをチェックするコードをもう一度確認したところ、このストアド プロシージャ呼び出しの後に移動されました。ああ!並行性の問題。

お手数をおかけして申し訳ありませんが、よろしくお願いいたします。

ps。興味深い点が 1 つだけあります。上記のコメントにあるように、SQL Server Management Studio 内で同時実行性の問題を再現できなかったのはなぜですか? これは、新しい DateAdd 形式と完全にインターリーブされました。

于 2013-02-15T06:15:36.010 に答える
0

構文は次のとおりです: DATEADD (datepart , number , date )

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

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

したがって、答えは number が int (2 行目) に解決され、 date が datetime (1 行目) に解決されるということです。それが違いです。

于 2013-02-09T11:28:46.880 に答える