This is quick way to get a string containing the sql datatype required for a column declaration, a create table, a print variables, or convert data to XML and XML to data, based on temp table and column information.

How to use:

1. Create your select statement 2. Define if you use or not prefix - you have prefix to column names and variable names. 3. Select and run the template to create your snippet code.

ex:

My select: select top 100 * into #temp FROM [MY_TABLES_VIEWS]

Set prefix to variables : v_ Set prefix to columnes  : c_

Create my data with temp table

1
2-- Delete temp table
3BEGIN TRY drop table #temp; END TRY BEGIN CATCH END CATCH;
4go
5select * into #temp FROM (select top 100 * from myViewAndTable) as tb1
6DECLARE @prefix_var nvarchar(50) = 'v_';
7DECLARE @prefix_col nvarchar(50) = 'c_';

List my variables, columns, types, nulls

 1
 2--- List my variables, columns, types, nulls
 3SET NOCOUNT ON;
 4SELECT distinct
 5    '@'+ @prefix_var + REPLACE(c.name,' ','_') AS [-- Variables],
 6    '['+ @prefix_col + c.name + ']' as [-- Columns],
 7    t.name + CASE WHEN t.name in ('nvarchar', 'nchar', 'varchar', 'char', 'binary') THEN CASE WHEN c.max_length in (-1,2147483647) THEN '(max)' ELSE ISNULL('(' + CAST(c.max_length AS VARCHAR(30)) + ')', '') END ELSE '' END + CASE WHEN t.name in ('decimal', 'NUMERIC') THEN ISNULL('(' + CAST(c.precision AS VARCHAR(30)) + ',' + CAST(c.scale AS VARCHAR(30)) + ')', '') ELSE '' END AS [-- Types],
 8    isnull(CASE WHEN c.is_nullable = 0 THEN ' NOT ' ELSE NULL END, ' ') + 'NULL' AS [-- Nulls]
 9FROM   tempdb.sys.columns as c INNER JOIN tempdb.sys.types as t ON c.system_type_id = t.system_type_id
10WHERE  (c.object_id = OBJECT_ID('tempdb.dbo.#temp'))

Select values

 1
 2--- Select values
 3SET NOCOUNT ON;
 4SELECT
 5    CASE c.column_id WHEN 1 THEN '  ' ELSE ', ' END
 6    + '@'+ @prefix_var + REPLACE(c.name,' ','_') + ' = ['+ @prefix_col + c.name + '] '
 7 as [-- Select to value]
 8FROM   tempdb.sys.columns as c INNER JOIN tempdb.sys.types as t ON c.system_type_id = t.system_type_id
 9WHERE  (c.object_id = OBJECT_ID('tempdb.dbo.#temp'))
10ORDER BY column_id

Print variables

1
2--- Print variables
3SET NOCOUNT ON;
4SELECT
5    'PRINT ''-- @'+ @prefix_var + REPLACE(c.name,' ','_') + ' = '' + CASE WHEN @v_BilletId IS NULL THEN ''NULL'' ELSE '''''''' + CAST(@'+ @prefix_var + REPLACE(c.name,' ','_') + ' AS NVARCHAR(MAX)) + '''''''' END;'
6 as [-- print value]
7FROM   tempdb.sys.columns as c INNER JOIN tempdb.sys.types as t ON c.system_type_id = t.system_type_id
8WHERE  (c.object_id = OBJECT_ID('tempdb.dbo.#temp'))
9ORDER BY column_id

Create table

 1
 2--- Create table
 3SET NOCOUNT ON;
 4SELECT distinct
 5    CASE c.column_id WHEN 1 THEN '  ' ELSE ', ' END
 6    + '['+ @prefix_col + c.name + '] '
 7    + t.name + CASE WHEN t.name in ('nvarchar', 'nchar', 'varchar', 'char', 'binary') THEN CASE WHEN c.max_length in (-1,2147483647) THEN '(max)' ELSE ISNULL('(' + CAST(c.max_length AS VARCHAR(30)) + ')', '') END ELSE '' END + CASE WHEN t.name in ('decimal', 'NUMERIC') THEN ISNULL('(' + CAST(c.precision AS VARCHAR(30)) + ',' + CAST(c.scale AS VARCHAR(30)) + ')', '') ELSE '' END
 8    + isnull(CASE WHEN c.is_nullable = 0 THEN ' NOT ' ELSE NULL END, ' ') + 'NULL'
 9    AS [-- Columns to create table]
10FROM   tempdb.sys.columns as c INNER JOIN tempdb.sys.types as t ON c.system_type_id = t.system_type_id
11WHERE  (c.object_id = OBJECT_ID('tempdb.dbo.#temp'))

Declare variables

 1
 2-- Declare variables
 3SET NOCOUNT ON;
 4SELECT distinct
 5    'DECLARE '
 6    + '@'+ @prefix_var + REPLACE(c.name,' ','_')
 7    + ' AS '
 8    + t.name + CASE WHEN t.name in ('nvarchar', 'nchar', 'varchar', 'char', 'binary') THEN CASE WHEN c.max_length in (-1,2147483647) THEN '(max)' ELSE ISNULL('(' + CAST(c.max_length AS VARCHAR(30)) + ')', '') END ELSE '' END + CASE WHEN t.name in ('decimal', 'NUMERIC') THEN ISNULL('(' + CAST(c.precision AS VARCHAR(30)) + ',' + CAST(c.scale AS VARCHAR(30)) + ')', '') ELSE '' END
 9    AS [-- Declare variables]
10FROM   tempdb.sys.columns as c INNER JOIN tempdb.sys.types as t ON c.system_type_id = t.system_type_id
11WHERE  (c.object_id = OBJECT_ID('tempdb.dbo.#temp'))

Tranform selected data to XML and XML to Table

 1
 2-- Tranform selected data to XML and XML to Table
 3SET NOCOUNT ON;
 4declare @t table (n int identity, line nvarchar(max));
 5declare @xml xml
 6SELECT @xml = ( SELECT * FROM #temp as [RowData] FOR XML AUTO, elements, root('TableData') )
 7INSERT INTO @t VALUES ('DECLARE @xml AS XML;');
 8INSERT INTO @t VALUES ('SET @xml = '''+REPLACE ( CAST( @xml as NVARCHAR(max)) , '''', '''''''')+ ''';')
 9INSERT INTO @t
10SELECT
11    CASE c.column_id WHEN 1 THEN 'SELECT  ' ELSE ', ' END
12    + 'Tbl.Col.value('''
13    + c.name
14    + '[1],'', '''
15    + t.name + CASE WHEN t.name in ('nvarchar', 'nchar', 'varchar', 'char', 'binary') THEN CASE WHEN c.max_length in (-1,2147483647) THEN '(max)' ELSE ISNULL('(' + CAST(c.max_length AS VARCHAR(30)) + ')', '') END ELSE '' END + CASE WHEN t.name in ('decimal', 'NUMERIC') THEN ISNULL('(' + CAST(c.precision AS VARCHAR(30)) + ',' + CAST(c.scale AS VARCHAR(30)) + ')', '') ELSE '' END
16    + ''' ) AS ['+ @prefix_col + c.name+']'
17FROM   tempdb.sys.columns as c INNER JOIN tempdb.sys.types as t ON c.system_type_id = t.system_type_id
18WHERE  (c.object_id = OBJECT_ID('tempdb.dbo.#temp'))
19ORDER by c.column_id;
20INSERT INTO @t VALUES ('FROM   @xml.nodes(''//TableData//RowData'') Tbl(Col);');
21select line as [-- Convert XML to Table] from @t order by n

Sources: https://stackoverflow.com/questions/11082418/get-column-creation-datatype-for-declaration

https://stackoverflow.com/questions/3989395/convert-xml-to-table-sql-server

https://stackoverflow.com/questions/8976414/get-structure-of-temp-table-like-generate-sql-script-and-clear-temp-table-for