我想为 AX 2012 获取样本数据,并为每个数据类型字段添加 3 年:日期时间。
我知道有 dateadd 函数,我可以单独更新每个字段,只是不知道如何搜索数据库并找到 datetime 类型的每个字段并执行更新。
也许构建该类型的所有字段的临时表?
我对sql很陌生,所以请温柔...
我想为 AX 2012 获取样本数据,并为每个数据类型字段添加 3 年:日期时间。
我知道有 dateadd 函数,我可以单独更新每个字段,只是不知道如何搜索数据库并找到 datetime 类型的每个字段并执行更新。
也许构建该类型的所有字段的临时表?
我对sql很陌生,所以请温柔...
这将为UPDATE
每列提供一个单独的语句。
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
UPDATE ' + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ ' SET ' + QUOTENAME(name)
+ ' = DATEADD(YEAR, 3, ' + QUOTENAME(name) + ');'
FROM sys.columns
WHERE system_type_id = 61
-- or maybe IN (40, 42, 43, 58, 61) if you want to handle all date types
AND is_computed = 0
AND [object_id] IN
(
SELECT object_id FROM sys.tables
WHERE OBJECTPROPERTY([object_id], 'IsMsShipped') = 0
);
PRINT @sql;
--EXEC sp_executesql @sql;
如果表有多个 datetime 列,您可能会做一些更棘手的事情来对每个表进行多列更新,但对于像这样的一次性任务,额外的复杂性似乎不值得性能差异。