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

Откуда: Челябинск
Сообщений: 1851
server2000
в @s лежит select
1) сколько полей он возвращает
2) как обратиться к полю по номеру
15 дек 12, 11:25    [13635931]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
muk07
server2000
в @s лежит select
1) сколько полей он возвращает
2) как обратиться к полю по номеру
1. Выполнить select * into #table from openrowset(@s)
2. Разобрать полученную #table, используя справочник метаданных сиквела
3. Используя эти данные, построить запрос к нужному полю.

Несколько сложновато, да, но представьте, что такая же задача на том языке, на котором вы программируете:
C++
в @s лежит текст кода класса
1) сколько там методов
2) как вызвать метод по номеру
15 дек 12, 11:53    [13635968]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1851
Спасибо за ответ.
С этого я вчера начал, но меня отговорили. (https://www.sql.ru/forum/actualthread.aspx?tid=990704)
Получалось гораздо короче.
Но меня остановило то что фраза order by недопустима в subquery.
Сейчас снова начну переписывать так как начинал и как Вы сказали.
Кстати, невозможно использовать временные таблицы.
Нужен динамический sql, а временная таблица в нем созданная, существует только в его пределах.
15 дек 12, 12:01    [13635977]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
declare @query varchar(8000) = 'select * from sysobjects';
exec('if object_id(''tempdb..#t'', ''U'') is not null drop table #t; select * into #t from (' + @query + ') t; select name, colid from tempdb..syscolumns where id = object_id(''tempdb..#t'', ''U'');');
15 дек 12, 12:13    [13636001]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Вот так лучше:
declare @s varchar(8000) = 'select * from sysobjects';
exec('if object_id(''tempdb..#t'', ''U'') is not null drop table #t; select top (0) * into #t from (' + @s + ') t; select name, colid from tempdb..syscolumns where id = object_id(''tempdb..#t'', ''U'');');
15 дек 12, 12:16    [13636013]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
muk07
Кстати, невозможно использовать временные таблицы.
Возможно использовать, и это единственно правильно.
muk07
Нужен динамический sql, а временная таблица в нем созданная, существует только в его пределах.
Нужно делать динамику в динамике, может даже 3 раза.
muk07
Но меня остановило то что фраза order by недопустима в subquery.
Да всё везде допустимо, с чего вы взяли??? Вы даже до конца сообщение об ошибке не дочитали.

Ваша ошибка в том, что не зная MSSQL, пытаетесь спросить, как реализовать неправильные методы работы с ним. Получается сложно и криво.
Я вот вам привёл пример с C++, что бы вы ответили на такой вопрос? Наверное, "а зачем это нужно, нельзя ли по другому?"

Вы опишите саму задачу, может, можно будет что то придумать.
15 дек 12, 12:16    [13636014]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1851
Благодарю, но в таком тоне я не общаюсь.
15 дек 12, 12:39    [13636073]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
muk07
Благодарю, но в таком тоне я не общаюсь.
Хм, я в недоумении. Извините, если что, я вроде стараюсь вежливо разговаривать.
15 дек 12, 13:13    [13636141]     Ответить | Цитировать Сообщить модератору
 Re: Сколько полей в запросе  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 216
muk07
Благодарю, но в таком тоне я не общаюсь.

Внезапно
15 дек 12, 13:43    [13636181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить