Добрый день.
Что хочется: хочется получить список полей временной таблицы с их типами, но именно в том порядке, в котором они расположены в таблице.
Получить нужные мне данные в произвольном порядке я могу
Набиваем временную таблицу любыми полями из нескольких таблиц:
create table table_01
(
id numeric(15,0) identity(1,1)
,product_id numeric(15,0)
,name varchar(50)
,short_name varchar(10)
)
create table table_02
(
id numeric(15,0)
,group_id numeric(15,0)
,name varchar(100)
,is_auto bit
,date_start datetime
)
insert into table_01
(product_id,name,short_name)
select 1,'product_16','pr16'
union all
select 1,'product_85','pr85'
union all
select 2,'product_88','pr88'
union all
select 2,'product_22','pr22'
union all
select 1,'product_14','pr14'
insert into table_02
(id,group_id,name,is_auto,date_start)
select 1,1,'group_01',1,'20230101'
union all
select 2,4,'group_02',0,'20230301'
union all
select 3,2,'group_03',0,'20230501'
select t1.*
,t2.id as t2_id
,t2.group_id as group_id
,t2.name as t2_name
,t2.is_auto as is_auto
,t2.date_start as date_start
into #temp_tbl
from table_01 t1
inner join table_02 t2 on t1.ID=t2.id
select *
from #temp_tbl
Тут в селекте видно, что столбцы отображаются, как и должно, в порядке их объявления
Далее я получаю данные по размерности полей
IF OBJECT_ID(N'tempdb.dbo.#pTmpTableInfo',N'U') IS NOT NULL
DROP table dbo.#pTmpTableInfo
create table #pTmpTableInfo
(
column_name nvarchar(256)
,Type nvarchar(256)
,max_length smallint
,precision tinyint
,scale tinyint
,is_nullable bit
,declare_type varchar(100)
,declare_text varchar(1000)
)
insert into #pTmpTableInfo
SELECT column_name = c.name
,[type] = t.name
,c.max_length
,c.precision
,c.scale
,c.is_nullable
,''
,''
FROM tempdb.sys.columns AS c
INNER JOIN tempdb.sys.types AS t ON c.system_type_id = t.system_type_id
AND t.system_type_id = t.user_type_id
WHERE [object_id] = OBJECT_ID(N'tempdb.dbo.#temp_tbl');
select *
from #pTmpTableInfo
drop table table_01
drop table table_02
drop table #temp_tbl
И тут в селекте видно, что они (что в общем логично) вразнобой. Не пойму, как мне сделать так, чтобы они были в том порядке, в котором мне нужно. Скорее всего нужно что-то придумать с row_number, но я не могу придумать по чему маркировать.
Буду благодарен за идеи :)