Вы можете создать хранимую процедуру, которая получает два входных параметра:
- имя схемы для дублирования
- название новой схемы
Затем вы можете вызвать эту процедуру из вашей программы на c #.
Внутри процедуры вы можете построить динамический оператор, запрашивающий системную таблицу SQLServer INFORMATION_SCHEMA.TABLES
.
Идея состоит в том, чтобы:
- создать новую схему
- клонировать исходные таблицы из старой схемы в новую схему
- затем удалите все строки из таблиц в новой схеме
Обратите внимание: если у вас есть внешние ключи, вам придется ими управлять.
Вот пример для начала:
create procedure p_clone_schema(
@source_schema nvarchar(50),
@new_schema nvarchar(50)
)as
begin
--check if destination schema already exists
if not exists (select * from INFORMATION_SCHEMA.SCHEMATA where schema_name = @new_schema)
begin
--create new schema
declare @sql nvarchar(max) = 'CREATE SCHEMA ' + QUOTENAME(@new_schema)
exec(@sql)
set @sql = ''
--build statement to copy tables in the new shema and then truncate them
select @sql = CONCAT
(
@sql , 'select * into ' , QUOTENAME(@new_schema) , '.' , QUOTENAME(TABLE_NAME)
, ' from ' , QUOTENAME(TABLE_SCHEMA) , '.' , QUOTENAME(TABLE_NAME)
, ' truncate table ' , QUOTENAME(@new_schema) , '.' , QUOTENAME(TABLE_NAME)
)
from INFORMATION_SCHEMA.TABLES
where TABLE_SCHEMA = @source_schema
and TABLE_TYPE = 'BASE TABLE'
exec(@sql)
end
end