Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбрать определённый номер столбца таблицы  [new]
Yurik_Tuturik
Member

Откуда:
Сообщений: 56
Здравствуйте! Подскажите, пожалуйста, как выбрать определённый номер столбца в таблице. В INFORMATION_SCHEMA.COLUMNS в ORIGINAL_POSITION этот номер вроде указан, а как указать его в команде select? Думаю, что это должно быть очень просто, но не могу сообразить как. Наверное, что-то типа select A[4] from A, но такого пока нет в SQL Server
16 сен 19, 15:52    [21971752]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать определённый номер столбца таблицы  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20533
Yurik_Tuturik
как указать его в команде select?
А вот никак. Номер из INFORMATION_SCHEMA.COLUMNS получил? так лучше получи имя, вставь в текст запроса, да выполни через EXEC.
16 сен 19, 16:03    [21971768]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать определённый номер столбца таблицы  [new]
Yurik_Tuturik
Member

Откуда:
Сообщений: 56
Спасибо, вроде понял - через динамический запрос в хранимой процедуре. Вроде больше никак. Тему можно закрывать. Извините за беспокойство
16 сен 19, 16:07    [21971775]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать определённый номер столбца таблицы  [new]
uaggster
Member

Откуда:
Сообщений: 827
Yurik_Tuturik
Спасибо, вроде понял - через динамический запрос в хранимой процедуре. Вроде больше никак. Тему можно закрывать. Извините за беспокойство

Ну почему ж, обязательно, через динамический то?

Ежели, т.с., per anus, то можно и без динамики:

if OBJECT_ID('tempdb..#t') is not null
	drop table #t
go

Create table #t (co1 int, col2 varchar(10), col3 datetime)
go

Insert into #t
Values
(1, 'test1', CURRENT_TIMESTAMP),
(2, 'test2', DATEADD(day, 1, CURRENT_TIMESTAMP)),
(3, 'test3', DATEADD(day, -1, CURRENT_TIMESTAMP))

Select [value] from 
(
	Select tt.nn.value('(.)[1]', 'nvarchar(max)') [value]
	,ROW_NUMBER() over (order by 1/0) N 
	from 
	(Select * from #t
		for xml path('root'), type
	) t(n)
	cross apply t.n.nodes('/root/*') tt(nn)
) ttt
Where N % 3 = 2

Здесь 3 - общее количество полей в таблице, а 2 - извлекаемое поле.
17 сен 19, 13:46    [21972518]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать определённый номер столбца таблицы  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33672
Блог
Yurik_Tuturik,

вероятнее всего у вас проблема с архитектурой решения,
ибо делать ПО, которое зависит от номера столбца, довольно глупо
17 сен 19, 14:16    [21972551]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать определённый номер столбца таблицы  [new]
Gerros
Member

Откуда: Харьков
Сообщений: 501
Yurik_Tuturik,

declare @num int = 1

select x = case @num
  when 1 then LoginProvider
  when 2 then ProviderKey
  when 3 then UserId
  else null
end
from AspNetUserLogins
18 сен 19, 21:36    [21973656]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать определённый номер столбца таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
Yurik_Tuturik,

в реляционной алгебре таблица - это куча (неупорядоченное множество) столбцов (атрибутов). В ней нет порядка столбцов. Поэтому неверно исходить из предпосылки, что сервер хранит на физическом или логическом уровне данные упорядоченно. Порядок столбцов может измениться при определённых действиях.
Наилучшим вариантом будет создание представления таблицы, в которым вы явно пронумеруете столбцы. Например
CREATE VIEW View1
AS
SELECT
Fielad1 AS [1],
Field5 AS [2]
FROM Table1;
19 сен 19, 12:31    [21974105]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить