簡體   English   中英

將所有日期時間列批量更新為 UTC 的最佳方法是什么

[英]What would be the best way to bulk update All Datetime columns to UTC

我正在尋找建議,我有一些數據庫並部署在德國和英國數據中心,因此所有 DateTime 列都包含根據其區域存儲的 Datetime 值。

現在我的組織希望將德國數據庫部署到英國服務器以節省許可成本,我需要弄清楚所有應用程序如何繼續像現在一樣工作。

最大的問題是 DateTime 列,我需要找到將所有 DateTime 列數據更改為 UTC DateTime 的最佳解決方案。

我相信當我將數據庫移動到英國地區時,我的存儲過程將繼續正常工作。

我需要更新我的 C# 代碼以在顯示數據時顯示區域特定日期時間

解決方案 1

您可以在您的英國服務器上使用德語語言環境。 如果這是您的應用程序的問題,那么您可以調整應用程序中的值。

解決方案 2

您可以找到數據庫中所有表的所有DateTime

select schema_name(t.schema_id) + '.' + t.name as [table],
       c.column_id,
       c.name as column_name,
       type_name(user_type_id) as data_type,
       scale as second_scale
from sys.columns c
join sys.tables t
     on t.object_id = c.object_id
where type_name(user_type_id) in ('date', 'datetimeoffset', 
      'datetime2', 'smalldatetime', 'datetime', 'time')
order by [table],
         c.column_id;

(如果需要,您當然可以調整類型),您甚至可以為每一列生成一個腳本:

select 'update ' + schema_name(t.schema_id) + '.' + t.name + ' set ' + column_name + ' = dateadd(hour, -1, ' + column_name + ')'
from sys.columns c
join sys.tables t
     on t.object_id = c.object_id
where type_name(user_type_id) in ('date', 'datetimeoffset', 
      'datetime2', 'smalldatetime', 'datetime', 'time')
order by [table],
         c.column_id;

然后運行以這種方式生成的腳本。 請注意,這是未經測試的,因此在將其應用於實際數據庫之前,您應該對其進行很好的測試。

解決方案 3

總是從早於給定日期的日期中減去一個小時。 這是一個公認的混亂解決方案,只有在所有其他方法都失敗時才應該這樣做。

暫無
暫無

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

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