1

テーブルの行の時間情報を更新できるようにする必要があります。IDは一意ではないため、startTime列を使用して特定の行を検索します。SQL Server CEとC#を使用しているので、日付オブジェクトはDateTimeC#のオブジェクトです。

これを最適化する別の方法はありますか?WHERE句とstartTime?が一致していないようです。SQLServerCEstartTimeのデータ型です。datetime

UPDATE tablename
SET endTime = '14/04/2012 9:42:58 PM', duration = '0.052003'
WHERE (startTime = CONVERT(DATETIME, '2012-04-14 21:42:58.000', 120)) AND (id= '14363204')
4

3 に答える 3

1

2つのこと:

  1. UPDATEではなく単純なSELECTステートメントから始めます。最初にそれを機能させてください。
  2. 日時リテラルを使用します。

これを試して:

SELECT *
FROM tablename
WHERE startTime = '2012-04-14 21:42:58.000' AND id = '14363204'

これが機能しない場合、最も可能性の高い問題は、時間が完全に一致していないことです。これの考えられる理由は次のとおりです。

  • データベースの日時はミリ秒の精度で保存される場合がありますが、クエリでは、最も近い秒に四捨五入されているように見える値が使用されています。これにより、一致が失敗する可能性があります。
  • データベース内の日付が別のタイムゾーンに保存されている可能性があります。
于 2012-04-14T12:25:14.097 に答える
0

なぜCONVERT(DATETIME, '2012-04-14 21:42:58.000', 120)ですか?startTimeを文字列として渡しますか?これは問題になる可能性があります。startTime.ToString()(C#)は、予想とは異なる形式を生成する可能性がありますか?動的SQLを使用していますか(つまり、C#でクエリを文字列として作成してから起動します)?

クエリを分解し、渡されたパラメータを確認します。

DECLARE @startTime DATETIME = '2012-04-14 21:42:58.000'
DECLARE @endTime DATETIME = '14/04/2012 9:42:58 PM'
DECLARE @duration DECIMAL = 0.052003
DECLARE @id INT = 14363204

-- debug - check if your input parameters are as expected
SELECT @startTime AS startTime, @endTime AS endTime, @duration AS duration

-- do the update
UPDATE  tablename
SET  endTime = @endTime, duration = @duration
WHERE  startTime = @startTime AND id = @id

上記をラップしCREATE PROCEDUREてC#からストアドプロシージャを実行し、動的SQLを使用しないことをお勧めします。

SQL CEで可能かどうかはわかりませんが、完全版では、アプリからSQLServerに送信されたクエリをキャッチして調べることができるSQLプロファイラーがあります。

于 2012-04-14T12:41:51.793 に答える
0

ミリ秒を削除する 120 日付スタイルを使用して時間を変換しています。たとえば、startTime 値が GETDATE() を使用して生成された場合、一致しません。

SQL (スタイル 121) で日付を扱う場合は常に ISO-8601 日付形式を使用することをお勧めします。これにより、CONVERT() 呼び出しが不要になり、さらに重要なことに、地域設定に依存しない (コードたとえば、フランスやドイツの SQL Server では失敗します)。

UPDATE tablename
SET endTime = '20120414 21:42:58', duration = '0.052003'
WHERE startTime = '20120414 21:42:58.000' AND id = '14363204'

SELECT CONVERT(DATETIME, startTime, 121) FROM tablename WHERE id = '14363204'更新したい startTime にミリ秒があるかどうかを試してみてください。

于 2012-04-14T12:46:03.840 に答える