SQL Server – How to Insert Data from One Table to Another After Casting Values

bulk-insertcastinsertsql server

I have a #temp table containing all the data that needs to be inserted into a table named Customer.
The column names of the two tables are exactly the same, but the data types are different. So I need to cast from one type to another before inserting the data into the Customer table.

The solution has to be implemented for a dynamic condition. i.e, I don't know the column name or data type.

Best Answer

DECLARE @SQL varchar(8000)


SET @SQL = ''

SELECT @SQL = @SQL +  ' CAST(' + COLUMN_NAME + ' as ' + ISNULL(DATA_TYPE + '(' + CAST(CHARACTER_OCTET_LENGTH as varchar(20)) + ') )','') + ' as ' + COLUMN_NAME + ','  FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'YourPermTable'

SET @SQL = SUBSTRING(@SQL,1,LEN(@SQL)-1)

SET @SQL = 'SELECT ' + @SQL + ' FROM YourTempTable'


PRINT @SQL  

Add the insert part and it should do the trick!