Step 1. Create stored procedure
CREATE PROCEDURE CopyDataTable
@SourceTable varchar(255),
@TargetTable varchar(255),
@SourceFilter nvarchar(max) = ''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SourceColumns VARCHAR(MAX)=''
DECLARE @TargetColumns VARCHAR(MAX)=''
DECLARE @Query VARCHAR(MAX)=''
SELECT
@SourceColumns = ISNULL(@SourceColumns +',', '') + T.COLUMN_NAME
FROM
(
select name as COLUMN_NAME from sys.all_columns
where object_id = (select object_id from sys.tables where name = @SourceTable)
and is_identity = 0
)T
SELECT
@TargetColumns = ISNULL(@TargetColumns +',', '') + T.COLUMN_NAME
FROM
(
select name as COLUMN_NAME from sys.all_columns
where object_id = (select object_id from sys.tables where name = @TargetTable)
and is_identity = 0
)T
set @Query = 'INSERT INTO ' + @TargetTable + ' (' + SUBSTRING(@TargetColumns,2 , 9999) + ') SELECT ' + SUBSTRING(@SourceColumns,2 , 9999) + ' FROM ' + @SourceTable + ' ' + @SourceFilter;
PRINT @Query
--EXEC(@Query)
END
GO
Step 2. Run stored procedure
use YourDatabaseName
exec dbo.CopyDataTable 'SourceTable','TargetTable'
Explanations
a) dbo.CopyDataTable
will transfer all data from SourceTable
to TargetTable
, except field with Identity
b) You can apply filter when call stored procedure, in order to transfer only row based on criteria
exec dbo.CopyDataTable 'SourceTable','TargetTable', 'WHERE FieldName=3'
exec dbo.CopyDataTable 'SourceTable','TargetTable', 'WHERE FieldName=''TextValue'''
c) Remove --
from --EXEC(@Query) WHEN finish