問題

私は、各行が挿入された時刻をマークするタイムスタンプが必要なテーブルを持っています。私は多くのデータベースエクスペリエンスを持っていませんが、たとえばストアドプロシージャを介して、データベース側で自動的に処理されることが最善であることがわかります。

MS SQLにはタイムスタンプデータ型がありますが、それについて読むと、C#のDateTimeオブジェクトではなく、一連の数値として扱われます。とにかく変換をしなければならない場合は、NVARCHARデータ型にすることはできませんでしたか?

だから簡単に言えば、テーブルに挿入された行にタイムスタンプを置く(自動的に?)最も簡単な方法は何ですか?

編集:テーブル定義は非常に簡単です。現時点では2つの列しかなく、まだタイムスタンプ列がありません。

         SqlCommand command = con.CreateCommand();
        command.CommandText = "INSERT INTO Bio VALUES (" +
            "@ID, @Name)";

        command.Parameters.AddWithValue("ID",number);
        command.Parameters.AddWithValue("Name", name);

        try
        {
            SqlDataReader thisReader = command.ExecuteReader();
            thisReader.Close();
        }
        catch { // Do something };
 

解決策は、今すぐ動作します。まず、Visual Studio 2008のServer Explorerウィンドウを使用して新しい列を追加しようとしました。データベースを見つけ、右クリックして「新しいクエリ」を選択します。次に、

 ALTER TABLE dbo.MyTable ADD CreatedDate datetime NOT NULL DEFAULT (GetUtcDate())
 

しかし、私は

ALTER TABLE SQL構造はサポートされていません クエリは、図および基準ペインでグラフィカルに表現することはできません。

代わりに私はそれをグラフィカルに追加しました。最初の "Open table definition"とCreatedDateをData TypeのColumn Nameとdatetimeの下に追加します。 Allow Nullsチェックを削除します。次に、列のプロパティで追加しました

 getutcdate()
 

「デフォルト値またはバインディング」という行の一般セクションの下に新しい行が挿入されるたびに、データベースは自動的に現在の日付と時刻をタイムスタンプとして表示します。

  ベストアンサー

テーブルに CreatedDate 列を持つには、次のように作成します。

 ALTER TABLE dbo.MyTable ADD CreatedDate datetime NOT NULL DEFAULT (GetUtcDate())
 

編集:その後、そのレコードのすべての更新時に値を更新したい場合は、その列または別の列にGETUTCDATE()を再割り当てすることができます(私はそれをCreatedDateと呼んでいますので、更新で使用すべきではありませんが、別のものを追加するか、変更された日付の名前を変更することができます)。私は間違いなく、UPDATEを行うストアドプロシージャにそのような列の更新を含めるでしょう

  同じタグがついた質問を見る

c#sql-server