你可以以此为起点,为您的存储过程:
DECLARE @SourceSchema SYSNAME = 'dbo' --Assume dbo for demo purposes.
DECLARE @SourceTable SYSNAME = 'SourceTableName'
DECLARE @DestSchema SYSNAME = 'dbo' --Assume dbo for demo purposes.
DECLARE @DestTable SYSNAME = 'DestinationTableName'
DECLARE @Tsql NVARCHAR(MAX) = ''
DECLARE @Columns NVARCHAR(MAX) = ''
SELECT @Columns = @Columns + '[' + src.COLUMN_NAME + '],'
FROM INFORMATION_SCHEMA.COLUMNS src
JOIN INFORMATION_SCHEMA.COLUMNS dest
ON src.COLUMN_NAME = dest.COLUMN_NAME
--Assume you only want to insert data from src fields to dest fields if they're the same data type.
--Data conversion is messy and outside the scope of the OP's question.
AND src.DATA_TYPE = dest.DATA_TYPE
WHERE src.TABLE_SCHEMA = @SourceSchema
AND src.TABLE_NAME = @SourceTable
AND dest.TABLE_SCHEMA = @DestSchema
AND dest.TABLE_NAME = @DestTable
SET @Columns = LEFT(@Columns, LEN(@Columns) - 1)
PRINT @Columns
SET @Tsql = 'INSERT INTO [' + @DestSchema + '].[' + @DestTable + ']' +
'(' + @Columns + ')' +
'SELECT ' + @Columns +
'FROM [' + @SourceSchema + '].[' + @SourceTable + ']'
PRINT @Tsql
--Uncomment when ready to proceed.
--EXEC (@TSql)
请发表您尝试 – Jayvee
如果有什么目的有需要的值,并且没有匹配的列在源列?什么定义匹配列? – Paparazzi