Если все они заканчиваются на date
, вы можете построить его динамически:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += ', ' + name = CASE ISDATE(' + name + ') WHEN 1 THEN
DATEADD(HOUR, 5, ' + name + ' ELSE NULL END'
FROM sys.columns
WHERE name LIKE '%date' AND [object_id] = OBJECT_ID('dbo.Tables_1');
SELECT @sql = 'UPDATE dbo.Tables_1 SET ' + STUFF(@sql, 1, 1, N'');
PRINT @sql;
-- EXEC sp_executesql @sql;
Теперь, если вы хотите сделать это для 12 таблиц, вы можете просто сделать это в цикле, например,
DECLARE @t SYSNAME, @sql NVARCHAR(MAX);
DECLARE c CURSOR LOCAL STATIC FORWARD_ONLY READ_ONLY
FOR
SELECT name FROM sys.tables
WHERE name IN ('Tables_1' --, other tables
);
OPEN c;
FETCH NEXT FROM c INTO @t;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = ', ' + name = CASE ISDATE(' + name + ') WHEN 1 THEN
DATEADD(HOUR, 5, ' + name + ' ELSE NULL END'
FROM sys.columns
WHERE name LIKE '%date' AND [object_id] = OBJECT_ID(@t);
SELECT @sql = 'UPDATE ' + @t + ' SET ' + STUFF(@sql, 1, 1, N'');
PRINT @sql;
-- EXEC sp_executesql @sql;
FETCH NEXT FROM c INTO @t;
END
CLOSE c;
DEALLOCATE c;