簡體   English   中英

SQL Server CE:在Where子句中使用DateTime的Update語句

[英]SQL Server CE: Update statement using DateTime in Where clause

我需要能夠更新表中一行的時間信息。 ID不是唯一的,因此我也使用startTime列查找特定行。 我正在使用SQL Server CE和C#,因此日期對象是C#中的DateTime對象。

還有另一種方法可以優化此效果嗎? 我似乎無法與WHERE子句和startTime匹配? startTime是SQL Server CE中的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')

兩件事情:

  1. 從簡單的SELECT語句而不是UPDATE開始。 首先開始工作。
  2. 使用日期時間文字。

嘗試這個:

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

如果這不起作用,則最可能的問題是時間不完全匹配。 可能的原因包括:

  • 數據庫中的日期時間可能以毫秒為單位存儲,但查詢所使用的值似乎已四舍五入到最接近的秒數。 這可能會導致匹配失敗。
  • 數據庫中的日期可能已存儲在其他時區中。

為什么要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中是否可行,但在完整版中,您具有SQL事件探查器,可讓您捕獲和檢查由應用程序發送到SQL Server的查詢。

您正在使用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'SELECT CONVERT(DATETIME, startTime, 121) FROM tablename WHERE id = '14363204'中查看要更新的startTime是否有毫秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM