0 t-sql axapta sql-server-2012 dynamics-ax-2012
我想为AX 2012提供样本数据,并为每个数据类型字段添加3年:datetime.
我知道有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;
Run Code Online (Sandbox Code Playgroud)
在表有多个日期时间列的情况下,你可能会做一些更复杂的事情来为每个表进行多列更新,但对于像这样的一次性任务,额外的复杂性似乎不值得性能差异.