0

我想为 AX 2012 获取样本数据,并为每个数据类型字段添加 3 年:日期时间。

我知道有 dateadd 函数,我可以单独更新每个字段,只是不知道如何搜索数据库并找到 datetime 类型的每个字段并执行更新。

也许构建该类型的所有字段的临时表?

我对sql很陌生,所以请温柔...

4

1 回答 1

5

这将为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 列,您可能会做一些更棘手的事情来对每个表进行多列更新,但对于像这样的一次性任务,额外的复杂性似乎不值得性能差异。

于 2012-09-27T19:13:33.593 回答