我有一个托管我的应用程序的服务器。该应用程序正在运行。昨天我意识到服务器日期晚了一天。
DateTime
如何通过为每条记录添加一天来更改服务器日期以及更新数据库中的所有列?
我有一个托管我的应用程序的服务器。该应用程序正在运行。昨天我意识到服务器日期晚了一天。
DateTime
如何通过为每条记录添加一天来更改服务器日期以及更新数据库中的所有列?
运行以下 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)
为了将来参考,在编写动态 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