When you work in Data Warehouse/BI Project or any project where database is required and you are in a situation where need to add one or more same columns to the tables you already built then this post will help you to achieve the goal quicker and error free.
For example a BI project you may working with require to add load timestamp to all the target tables which at the design phase somehow missed or you find out at the later part of the project that you require one or two particular columns to all the tables.
Boring task!!! right?? Going through all the tables and changing it one by one is time consumable and error prone. For example if you have 50 tables and you need to add one column say column called 'UpdatedAt'. How do we do it by using SQL script?
You need to list all the table name and run the below query by replacing the table name e.g. 'testTable1', 'testTable2' etc.
Declare @tbl_name as varchar(100)
Declare @tsql_code Varchar(500)
Declare cur_table cursor local for
select name
from sys.tables
Where name in ('testTable1','testTable2')
order by 1
for read only
open cur_table
fetch cur_table into @tbl_name
while @@fetch_status = 0
begin
Select @tsql_code='Alter Table ' + @tbl_name +' Add Col1 Varchar(10), Col2 Varchar(10)'
Exec (@tsql_code)
fetch cur_table into @tbl_name
end
close cur_table
deallocate cur_table
However, the above code may not work since schema name is missing there, so you need to add the schema name along with the table name like below example:
Declare @tbl_name as varchar(100)
Declare @tsql_code Varchar(500)
Declare cur_table cursor local for
select '['+SCHEMA_NAME(schema_id)+'].['+name+']'
from sys.tables
Where SCHEMA_NAME(schema_id)+'.'+name in ('dbo.Currency','dbo.Sales')
order by 1
for read only
open cur_table
fetch cur_table into @tbl_name
while @@fetch_status = 0
begin
Select @tsql_code='Alter Table ' + @tbl_name +' Add UpdatedAt [DATETIME]'
Exec (@tsql_code)
fetch cur_table into @tbl_name
end
close cur_table
deallocate cur_table
Hope this will make your life easier.
For example a BI project you may working with require to add load timestamp to all the target tables which at the design phase somehow missed or you find out at the later part of the project that you require one or two particular columns to all the tables.
Boring task!!! right?? Going through all the tables and changing it one by one is time consumable and error prone. For example if you have 50 tables and you need to add one column say column called 'UpdatedAt'. How do we do it by using SQL script?
You need to list all the table name and run the below query by replacing the table name e.g. 'testTable1', 'testTable2' etc.
Declare @tbl_name as varchar(100)
Declare @tsql_code Varchar(500)
Declare cur_table cursor local for
select name
from sys.tables
Where name in ('testTable1','testTable2')
order by 1
for read only
open cur_table
fetch cur_table into @tbl_name
while @@fetch_status = 0
begin
Select @tsql_code='Alter Table ' + @tbl_name +' Add Col1 Varchar(10), Col2 Varchar(10)'
Exec (@tsql_code)
fetch cur_table into @tbl_name
end
close cur_table
deallocate cur_table
However, the above code may not work since schema name is missing there, so you need to add the schema name along with the table name like below example:
Declare @tbl_name as varchar(100)
Declare @tsql_code Varchar(500)
Declare cur_table cursor local for
select '['+SCHEMA_NAME(schema_id)+'].['+name+']'
from sys.tables
Where SCHEMA_NAME(schema_id)+'.'+name in ('dbo.Currency','dbo.Sales')
order by 1
for read only
open cur_table
fetch cur_table into @tbl_name
while @@fetch_status = 0
begin
Select @tsql_code='Alter Table ' + @tbl_name +' Add UpdatedAt [DATETIME]'
Exec (@tsql_code)
fetch cur_table into @tbl_name
end
close cur_table
deallocate cur_table
Hope this will make your life easier.
1 comment:
Thanks to the blogger for sharing such explanatory codes.
Powerbi Read Rest
Post a Comment