1

たとえば、MSSQLServer2008 の列に datetime データ型を設定して datecreated を取得する場合、.NET レイヤーに現在の日付を渡すか、列のデフォルト値またはバインディングを (getdate()) に設定する方がよいでしょうか?

4

4 に答える 4

4

そのような項目の日付をSQLサーバーに処理させる方が良いと思います。クライアントが日付を渡す場合、クライアントが異なるタイムゾーンにある場合、または1つのクライアントのマシンに間違った日付が設定されている場合、問題が発生する可能性があります。さらに、コマンドで送信する必要のあるアイテムが1つ少なくなります。

于 2009-04-03T12:13:37.007 に答える
1

私の見解では、方法が一貫している限り、どこでそれを行ってもそれほど違いはありません。

パフォーマンスや保守性の面で大きな違いがあるとは思えません。

私の好みはgetdate()を使用してデータベースに作成することですが、これによりORMを使用するときにパスで問題が発生しました。

于 2009-04-03T12:14:17.143 に答える
1

サーバーの現地時間ではなく、UTC で時刻を記述することを検討する必要があります。このようにして、サーバーをあるタイムゾーンから別のタイムゾーンに移動する必要がある場合、問題はありません.

例として、サーバーをテキサスからカリフォルニアに移動しています。メインの本番アプリは、すべての日時値に UTC 時間を使用します。ただし、発券システムはサーバー時間を使用し、発券アプリは、サーバーがテキサスにあると仮定して、値をユーザーの現地時間に変更します。サーバーをカリフォルニアに移動すると、すべてが非常に混乱し、値がすべて 2 時間ずれます。

于 2009-04-06T08:24:40.557 に答える
0

GETDATE() のデフォルト値でその列を作成しますが、ストアド プロシージャに実際の値を設定させます。 すべての列を含まない INSERT ステートメントを使用するのは悪い習慣だと思います

必要に応じて、トランザクションの開始時に変数 @RunDate を GETDATE() に設定し、すべての CreateDate 列と LastChgDate 列を @RunDate でマークします。私は主キーに日付を使用したことがないので、多少ずれていても問題ありません。ユーザーが作成/変更したすべてのものを同時に見る方が良いと思います。

于 2009-04-03T13:26:48.747 に答える