Как понять порядок столбцов в таблице в SQL (MS SQL)?

Ссылка скопирована
1 ответ

Добрый день.

Что хочется: хочется получить список полей временной таблицы с их типами, но именно в том порядке, в котором они расположены в таблице.
Получить нужные мне данные в произвольном порядке я могу

Набиваем временную таблицу любыми полями из нескольких таблиц:

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

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

Тут в селекте видно, что столбцы отображаются, как и должно, в порядке их объявления

Как понять порядок столбцов в таблице в SQL (MS SQL)?

Далее я получаю данные по размерности полей

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

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

Как понять порядок столбцов в таблице в SQL (MS SQL)?

И тут в селекте видно, что они (что в общем логично) вразнобой. Не пойму, как мне сделать так, чтобы они были в том порядке, в котором мне нужно. Скорее всего нужно что-то придумать с row_number, но я не могу придумать по чему маркировать.

Буду благодарен за идеи :)

Дополнительно:

ORDER BY tempdb.sys.columns.column_id

Ответы:

Ну любой API который работает с metadata из курсора - всегда выдаст тебе колонки именно в том порядке
как и выдает фактический запрос. Для JDBC там была своя процедура https://www.baeldung.com/jdbc-database-metadata

Да и даже еслиб ты не знал про метадату - можно просто выбрать запрос который выдает 1 строку и взать из него типы полей тоже через какой- то API (JDBC/ODBC).

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

Для понимания порядка столбцов в таблице в SQL (MS SQL) можно воспользоваться следующими способами:

1. Использование команды DESCRIBE или DESC в SQL запросе. Например, для таблицы "users" запрос будет выглядеть следующим образом:

DESCRIBE users;

DESCRIBE users;

Этот запрос вернет информацию о структуре таблицы "users", включая названия столбцов, их типы данных, длину и другие параметры.

2. Использование системной таблицы INFORMATION_SCHEMA.COLUMNS. Эта системная таблица содержит информацию о столбцах всех таблиц в базе данных. Можно выполнить следующий запрос, чтобы получить информацию о столбцах таблицы "users":

SELECT COLUMN_NAME, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'users'
ORDER BY ORDINAL_POSITION;

SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' ORDER BY ORDINAL_POSITION;

Этот запрос вернет названия столбцов таблицы "users" в порядке их расположения.

3. Использование инструментов управления базами данных, таких как SQL Server Management Studio (SSMS). В SSMS можно открыть диаграмму таблицы и посмотреть порядок столбцов визуально.

4. Просмотр структуры таблицы в схеме базы данных. В схеме базы данных можно найти информацию о порядке столбцов таблицы.

Используя вышеперечисленные методы, вы сможете понять порядок столбцов в таблице в SQL (MS SQL) и работать с ними эффективно.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно