Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
Подскажите пожалуйста, как результат запроса вывести в одном столбцеSELECT 1 as col1, 2 as col2, 3 as col3, 4 AS col4 нужен такой результат: name1 2 3 4 Но число столбцов в запросе может быть разным. В примере 4 столбца, но может быть и 3 и 6 и 7 и т.д. |
11 мар 16, 16:27 [18920732] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Узнать где ? |
11 мар 16, 16:28 [18920741] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы не знаете, какой запрос собрались выполнять ? |
||
11 мар 16, 16:29 [18920743] Ответить | Цитировать Сообщить модератору |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
узнать число столбцов в запросе. Число столбцов может меняться SELECT 1 as col1, 2 as col2, 3 as col3, 4 AS col4 |
||
11 мар 16, 16:29 [18920748] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вопрос был "где узнать", а не "что узнать" |
||
11 мар 16, 16:30 [18920757] Ответить | Цитировать Сообщить модератору |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
есть запрос из нескольких полей, который возвращает одну строчку. Число столбцов не известно, но результат каждого столбца нужно вывести в одном столбце. |
||||
11 мар 16, 16:32 [18920769] Ответить | Цитировать Сообщить модератору |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
NewIvanovec, если б я знал заранее сколько столбцов будет, я бы использовал unpivot. поэтому если я хочу unpivot использовать, тогда мне как-то нужно узнать число столбцов, которые возвращает запрос. |
11 мар 16, 16:35 [18920791] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В воздухе висит ? Или где он есть ?
Языки программирования имеют коллекции и методы для доступа к метаданным результата запроса. Их точные названия можно найти в руководстве по этому ЯП |
||||
11 мар 16, 16:36 [18920796] Ответить | Цитировать Сообщить модератору |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
число столбцов нужно узнать в запросе, не в таблице |
||
11 мар 16, 16:36 [18920797] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
На сервере нет таких объектов, как запрос. А про то, чего у него нет, сервер не может что-то знать. |
||
11 мар 16, 16:38 [18920807] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52462 |
Функция SQLNumResultCols() возвращает количество столбцов в текущем резалт-сете. |
||
11 мар 16, 16:40 [18920816] Ответить | Цитировать Сообщить модератору |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
Большое спасибо. а как мне все результаты вывести всё в одном столбце.
нужен такой результат:
name
1
2
3
4
|
11 мар 16, 16:49 [18920874] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
unpivot |
11 мар 16, 16:51 [18920884] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Задать вопрос на правильном форуме. Сервер не занимается выводом результатов. |
||
11 мар 16, 16:51 [18920886] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
NewIvanovec Member Откуда: Msk Сообщений: 582 |
мне бы вот этот запрос, но на 2005 сервере. на 2014-м работает |
||
11 мар 16, 17:11 [18921005] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет 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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Вот и ещё одного разработчика научили г-нокодить... |
11 мар 16, 17:55 [18921180] Ответить | Цитировать Сообщить модератору |
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 | ![]() |