|
-- Drop any existing Backup tables |
|
|
|
set nocount on; |
|
|
|
declare @sql varchar(max) = ''; |
|
|
|
select @sql = @sql + 'print ''Dropping backup table dbo.[' + o.name + ']'';drop table dbo.[' + o.name + '];' |
|
from sys.objects o |
|
where o.type = 'U' and left(o.name, 7) = 'Backup_' |
|
order by o.create_date asc; |
|
|
|
exec(@sql); |
|
|
|
|
|
/*----------------------------------*/ |
|
/* BACKUP SCRIPT ADJUSTED FOR AZURE */ |
|
/*----------------------------------*/ |
|
|
|
-- Create backup tables |
|
|
|
print ''; |
|
set @sql = ''; |
|
|
|
with |
|
TableColumns (TableName, ColumnName, ColumnType, Nullable, order1, order2) |
|
as ( |
|
select |
|
o.name, |
|
c.name, |
|
case when c.max_length = t.max_length then t.name else t.name + '(' + iif(c.max_length = -1,'max',cast(c.max_length as varchar)) + ')' end as Type, |
|
c.is_nullable, |
|
o.create_date, |
|
c.column_id |
|
from sys.objects o |
|
join sys.columns c |
|
join sys.types t |
|
on (t.user_type_id = c.user_type_id) |
|
on (c.object_id = o.object_id) |
|
where |
|
o.type = 'U' and |
|
left(o.name, 7) != 'Backup_' |
|
), |
|
Concatenated (TableName, Columns, order1) |
|
as ( |
|
select |
|
tcO.TableName, |
|
stuff(( |
|
select ',' + ColumnName + ' ' + ColumnType + (case Nullable when 0 then ' not ' else ' ' end) + 'null' |
|
from TableColumns tcI |
|
where tcI.TableName = tcO.TableName |
|
order by order1, order2 |
|
for xml path('') |
|
), 1, 1, ''), |
|
tcO.order1 |
|
from TableColumns tcO |
|
group by tcO.TableName, tcO.order1 |
|
) |
|
select @sql = @sql + 'print ''Creating backup table dbo.[Backup_' + TableName + ']'';create table dbo.[Backup_' + TableName +'] (' + Columns + ');' |
|
from Concatenated |
|
order by order1; |
|
|
|
exec(@sql); |
|
|
|
-- Create clustered indices on backup tables |
|
|
|
print ''; |
|
set @sql = ''; |
|
|
|
with |
|
IndexColumns (TableName, ColumnName, order1, order2) |
|
as ( |
|
select o.name, c.name, o.create_date, ic.index_column_id |
|
from sys.indexes i |
|
join sys.objects o |
|
on (o.object_id = i.object_id) |
|
join sys.columns c |
|
on (c.object_id = o.object_id) |
|
join sys.index_columns ic |
|
on ((ic.column_id = c.column_id) and (ic.object_id = o.object_id) and (ic.index_id = i.index_id)) |
|
join sys.types t |
|
on (t.user_type_id = c.user_type_id) |
|
where |
|
o.type = 'U' and |
|
left(o.name, 7) != 'Backup_' and |
|
i.type = 1 -- CLUSTERED |
|
), |
|
Concatenated (TableName, Columns, order1) |
|
as ( |
|
select |
|
icO.TableName, |
|
stuff(( |
|
select ',' + icI.ColumnName |
|
from IndexColumns icI |
|
where icI.TableName = icO.TableName |
|
order by order1, order2 |
|
for xml path('') |
|
), 1, 1, ''), |
|
icO.order1 |
|
from IndexColumns icO |
|
group by icO.TableName, icO.order1 |
|
) |
|
select @sql = @sql + 'print ''Creating clustered index on dbo.[Backup_' + TableName + ']'';create clustered index IDX_Backup_' + TableName + '_Clustered on dbo.[Backup_' + TableName + '] (' + Columns + ');' |
|
from Concatenated |
|
order by order1; |
|
|
|
exec(@sql); |
|
|
|
-- Backup data |
|
|
|
print ''; |
|
set @sql = ''; |
|
|
|
select @sql = @sql + 'print ''Backing up data for dbo.[' + o.name + ']'';insert dbo.[Backup_' + o.name + '] select * from dbo.[' + o.name + '];' |
|
from sys.objects o |
|
where |
|
o.type = 'U' and |
|
left(o.name, 7) != 'Backup_' |
|
order by o.create_date; |
|
|
|
exec(@sql); |
|
|
|
set nocount off; |