为数据类型'datetime'的每个字段添加+ x年

0 t-sql axapta sql-server-2012 dynamics-ax-2012

我想为AX 2012提供样本数据,并为每个数据类型字段添加3年:datetime.

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

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

我是sql的新手所以请温柔...

Aar*_*and 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;
Run Code Online (Sandbox Code Playgroud)

在表有多个日期时间列的情况下,你可能会做一些更复杂的事情来为每个表进行多列更新,但对于像这样的一次性任务,额外的复杂性似乎不值得性能差异.