You can use this dynamic query
DECLARE @q nvarchar(max) DECLARE @c int SELECT @c=count(1) from sys.tables where type='U' -- add any other where condition here WHILE (@c>0) BEGIN select @q = 'ALTER TABLE ['+ t.name + '] ADD [month] nvarchar(255) NULL; ' FROM ( SELECT name, ROW_NUMBER() OVER(ORDER BY name ASC) as r FROM sys.tables where type='U' ) t where t.r=@c SET @c=@c-1 --PRINT(@q) EXEC(@q) END
Explanation: We use sys.tables table which provides us the name of all tables need to be altered.
If you have any business rule like only tables whose name starts with 'Report Date' then you need to modify at two places
--here SELECT @c=count(1) from sys.tables where type='U' and name like 'Report Date%' --... --... -- and here FROM ( SELECT name, ROW_NUMBER() OVER(ORDER BY name ASC) as r FROM sys.tables where type='U' and name like 'Report Date%' ) t where t.r=@c
sys.tablesfor building dynamic query which alters the table definition for you. Important thing to note is that if tables contain data you should create the new column as NULLable. See my answer