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

Откуда: Msk
Сообщений: 582
Подскажите пожалуйста, как результат запроса вывести в одном столбце
SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4


нужен такой результат:
name
1
2
3
4


Но число столбцов в запросе может быть разным. В примере 4 столбца, но может быть и 3 и 6 и 7 и т.д.
11 мар 16, 16:27    [18920732]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Узнать где ?
11 мар 16, 16:28    [18920741]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
NewIvanovec
Но число столбцов в запросе может быть разным. В примере 4 столбца, но может быть и 3 и 6 и 7 и т.д.

Вы не знаете, какой запрос собрались выполнять ?
11 мар 16, 16:29    [18920743]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Glory
Узнать где ?


узнать число столбцов в запросе. Число столбцов может меняться
SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4
11 мар 16, 16:29    [18920748]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
NewIvanovec
узнать число столбцов в запросе. Число столбцов может меняться

Вопрос был "где узнать", а не "что узнать"
11 мар 16, 16:30    [18920757]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Glory
NewIvanovec
Но число столбцов в запросе может быть разным. В примере 4 столбца, но может быть и 3 и 6 и 7 и т.д.

Вы не знаете, какой запрос собрались выполнять ?


есть запрос из нескольких полей, который возвращает одну строчку.
Число столбцов не известно, но результат каждого столбца нужно вывести в одном столбце.
11 мар 16, 16:32    [18920769]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
NewIvanovec,

если б я знал заранее сколько столбцов будет, я бы использовал unpivot.
поэтому если я хочу unpivot использовать, тогда мне как-то нужно узнать число столбцов, которые возвращает запрос.
11 мар 16, 16:35    [18920791]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
NewIvanovec
есть запрос

В воздухе висит ? Или где он есть ?

NewIvanovec
Число столбцов не известно, но результат каждого столбца нужно вывести в одном столбце.

Языки программирования имеют коллекции и методы для доступа к метаданным результата запроса.
Их точные названия можно найти в руководстве по этому ЯП
11 мар 16, 16:36    [18920796]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Glory
Узнать где ?

число столбцов нужно узнать в запросе, не в таблице
11 мар 16, 16:36    [18920797]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
NewIvanovec
число столбцов нужно узнать в запросе, не в таблице

На сервере нет таких объектов, как запрос.
А про то, чего у него нет, сервер не может что-то знать.
11 мар 16, 16:38    [18920807]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
на правах бреда (сочиняйте дальше сами):

DECLARE f_cursor CURSOR FOR
SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4

OPEN f_cursor;
FETCH NEXT FROM f_cursor;

SELECT reference_name, 
		cursor_name, cursor_scope,
		status, model, concurrency, scrollable,
		open_status, cursor_rows, fetch_status,
		column_count, row_count, last_operation,
		cursor_handle
FROM sys.syscursorrefs scr, sys.syscursors sc
WHERE scr.cursor_handl = sc.cursor_handle
				
CLOSE f_cursor;
DEALLOCATE f_cursor;
11 мар 16, 16:39    [18920812]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52462
NewIvanovec
мне как-то нужно узнать число столбцов, которые возвращает запрос

Функция SQLNumResultCols() возвращает количество столбцов в текущем резалт-сете.
11 мар 16, 16:40    [18920816]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Большое спасибо.
а как мне все результаты вывести всё в одном столбце.

нужен такой результат:
name
1
2
3
4
11 мар 16, 16:49    [18920874]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
stdvb
Member

Откуда:
Сообщений: 39
SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4
into #tmp

SELECT	name
FROM	tempdb.sys.columns
WHERE	object_id = OBJECT_ID('tempdb..#tmp')
11 мар 16, 16:50    [18920878]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
unpivot
11 мар 16, 16:51    [18920884]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
NewIvanovec
а как мне все результаты вывести всё в одном столбце.

Задать вопрос на правильном форуме.
Сервер не занимается выводом результатов.
11 мар 16, 16:51    [18920886]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
select u.[name], [column]
from
  (SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4) p
unpivot ([name] for [column] in (col1, col2, col3, col4)) as u 
11 мар 16, 16:57    [18920924]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
а лучше так:
declare @xml xml=(select * from (SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4) p for xml raw, elements)

select 
	 t.c.value('local-name(.)', 'varchar(50)') as field
	,t.c.value('./text()[1]', 'varchar(50)') as value
from @xml.nodes('/row/*') as t(c)
11 мар 16, 17:00    [18920940]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Konst_One
а лучше так:
declare @xml xml=(select * from (SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4) p for xml raw, elements)

select 
	 t.c.value('local-name(.)', 'varchar(50)') as field
	,t.c.value('./text()[1]', 'varchar(50)') as value
from @xml.nodes('/row/*') as t(c)


мне бы вот этот запрос, но на 2005 сервере.
на 2014-м работает
11 мар 16, 17:11    [18921005]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
на 2005 тоже должен работать

https://msdn.microsoft.com/ru-ru/library/ms188282(v=sql.90).aspx

чуток инициализацию исправить:

declare @xml xml;
SET @xml = select * from (SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4) p for xml raw, elements;

select 
	 t.c.value('local-name(.)', 'varchar(50)') as field
	,t.c.value('./text()[1]', 'varchar(50)') as value
from @xml.nodes('/row/*') as t(c)
11 мар 16, 17:14    [18921019]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Дед-Папыхтет
Member [заблокирован]

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

if object_id('tempdb..dddd') is not null drop table tempdb..dddd

SELECT  1 as col1, 2 as col2, 3 as col3, 4 AS col4
into tempdb..dddd

select name
from tempdb.sys.columns
where object_id in
(
select object_id
from tempdb.sys.objects
where name = 'dddd'
)
11 мар 16, 17:49    [18921165]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8316
Вот и ещё одного разработчика научили г-нокодить...
11 мар 16, 17:55    [18921180]     Ответить | Цитировать Сообщить модератору
 Re: как узнать число столбцов в запросе  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Господа, большое спасибо за помощь.

итоговый запрос:

DECLARE @xml XML;
SET @xml = ( 
SELECT *
FROM   (
           SELECT 1  AS col1,
                  2  AS col2,
                  3  AS col3,
                  4  AS col4
       ) p FOR XML RAW,
       ELEMENTS);

SELECT t.c.value('local-name(.)', 'varchar(50)') AS field,
       t.c.value('./text()[1]', 'varchar(50)') AS VALUE
FROM   @xml.nodes('/row/*') AS t(c)
14 мар 16, 13:20    [18927839]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить