我有一台托管我的应用程序的服务器。该应用程序正在运行。昨天我意识到服务器日期落后一天。
如何通过在每条记录中添加一天来更改服务器日期以及更新数据库中的所有DateTime
列?
答案 0 :(得分:7)
运行此SQL语句:
select 'update '+so.name+' set '+sc.name+' = dateadd(day,1,'+sc.name+')'
from sysobjects so
inner join syscolumns sc
on so.id = sc.id
where sc.xtype = 61
and so.type = 'u'
复制结果并将其粘贴到查询窗口中并执行。
update Status set CreatedDate = dateadd(day,1,CreatedDate)
update Status set DateUpdated = dateadd(day,1,DateUpdated)
update TxSession set SessionDate = dateadd(day,1,SessionDate)
update TxSession set CreatedDate = dateadd(day,1,CreatedDate)
update TxSession set LastModifiedDate = dateadd(day,1,LastModifiedDate)
答案 1 :(得分:2)
为了将来参考,在编写动态SQL以执行此类工作时要记住的首要事项是:
我知道我使用了一个游标(糟糕的肯,坏),但在这种情况下似乎是合适的。当然,您可以运行查询并将输出复制并粘贴到新的查询窗口。甚至可能更容易这样。
DECLARE UpdateCur
FOR
SELECT 'UPDATE ['+tabs.TABLE_SCHEMA+'].['+tabs.TABLE_NAME+'] ' +
'SET ['+cols.COLUMN_NAME+'] = DATEADD(dd,1,['+cols.COLUMN_NAME+']);'
FROM INFORMATION_SCHEMA.COLUMNS cols
JOIN INFORMATION_SCHEMA.TABLES tabs
ON cols.TABLE_NAME = tabs.TABLE_NAME
WHERE tabs.TABLE_TYPE = 'BASE TABLE' -- Exclude views
-- Include datatypes DATE, DATETIME, DATETIME2, DATETIMEOFFSET
AND cols.DATA_TYPE LIKE 'DATE%'
DECLARE @sql nvarchar(max)
OPEN UpdateCur
FETCH NEXT FROM UpdateCur INTO @sql
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
EXEC sp_executeSQL @sql
END
FETCH NEXT FROM UpdateCur INTO @sql
END
CLOSE UpdateCur
DEALLOCATE UpdateCur
GO