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

Откуда:
Сообщений: 566
Добрый день!
Задача такая: пользователь вводит какой то запрос на выборку , необходимо программно манипулировать этими данными (сортировка, группировка и т.д.)
Проблема в том что не могу получить Select из этого массива. Идея такова:
Select * from ( @какой то запрос юзера) t order by ...

Если запрос простой, то проблем нет, но если там объявляют переменные и т.п. то таким методом данные не получишь.
Попробовал сделать запрос через Exec
Declare @STR nvarchar(max)
Set @STR='@@какой то запрос юзера'
Exec (@STR)

Так данные выбираются, но я не могу использовать SELECT, а очень надо. Можно конечно вставить Exec (@STR) во временную таблицу и с ней работать, но для ее создания нужно знать структуру полученной выборки.
Подскажите, пожалуйста, как такое реализовать.
10 авг 15, 15:01    [17999225]     Ответить | Цитировать Сообщить модератору
 Re: Select из Exec  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
https://www.sql.ru/faq/faq_topic.aspx?fid=416
10 авг 15, 15:09    [17999289]     Ответить | Цитировать Сообщить модератору
 Re: Select из Exec  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @a NVARCHAR(MAX) = 'select * from sys.objects'

IF OBJECT_ID('tempdb.dbo.##temp') IS NOT NULL
	DROP TABLE ##temp

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = REPLACE('select * from sys.objects', 'from', 'into ##temp from')

EXEC sys.sp_executesql @SQL

SELECT *
FROM ##temp
ORDER BY 1


если нужно узнать какие там столбцы

SELECT c.name
FROM tempdb.sys.[columns] c
WHERE c.[object_id] = OBJECT_ID('tempdb.dbo.##temp')


а если честно, в Вашем случае нормального решение вопроса не будет. Ведь мы не знаем какой там может прийти запрос... от юзера
10 авг 15, 15:10    [17999305]     Ответить | Цитировать Сообщить модератору
 Re: Select из Exec  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вообще то, лучше так не делать и не давать такую возможность пользователям.
10 авг 15, 15:14    [17999338]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить