Дополнительно
SQL Server - хранимая процедура SELECT FROM
У меня есть хранимая процедура, которая возвращает строки:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
На самом деле моя процедура немного сложнее, поэтому необходим sproc.
Можно ли выбрать вывод, вызывая эту процедуру?
Что-то вроде:
SELECT * FROM (EXEC MyProc) AS TEMP
Мне нужно использовать SELECT TOP X
, ROW_NUMBER
, и дополнительное предложение WHERE
для вывода данных на страницу, и я не хочу передавать эти значения в качестве параметров.
312
15
Вы можете
... sql ....
Вы должны смотреть на эту прекрасную статью Ерланд сайт sommarskog:
Это в основном список всех существующих вариантов для вашего сценария.
Вы можете использовать пользовательская функция или просмотр вместо процедуры.
Процедура может возвращать несколько результирующих наборов, каждый со своей собственной схемой. Это's не подходит для использования в оператор SELECT.
Вам либо нужна Table-Valued function, либо вставьте свой EXEC во временную таблицу:
Вы должны прочитать о OPENROWSET и OPENQUERY
Нужно объявить тип таблицы, который содержит одинаковое количество столбцов вашей хранимой процедуры возвращается. Типы данных столбцов в виде таблицы и столбцы, возвращаемые процедурами должна быть такой же
Затем вам нужно вставить результат хранимой процедуры в свой тип таблицы вы только что определили
В конце концов просто выберите из таблицы типа
Не надо использовать временную таблицу.
Это мое решение
Вы можете скопировать вывод из СП в temporaty таблице.
использовать openquery и перед выполнять набор 'набор FMTONLY выкл; установить параметр nocount на;'
Попробуйте этот пример кода:
Попробуйте преобразовать вашу процедуру встроенная функция, которая возвращает таблицу следующим образом:
И тогда вы можете назвать его как
У вас также есть возможность передачи параметров в функцию следующим образом:
И называть это
Если 'доступ к данным' ложь,
после того,
он работает.
Вы можете обмануть немного с openrowset :
Это все равно запустить весь СП каждый раз, конечно.
Для простоты и сделайте им re-выполнимое, я использовал процедура системы "sp_readerrorlog", чтобы получить данные:
Похоже, что вам просто нужно использовать представление. Представление позволяет представить запрос в виде таблицы, чтобы к ней, представлению, можно было обращаться.
Если ваш сервер называется например SERVERX, это, как я это сделал...
Чтобы проверить, что все работает, я закомментировал
метод exec (командная строка) и заменил его
выберите @УМК` просматривать команды, прежде чем пытаться выполнить его! Это было, чтобы убедиться, что все корректный номер один-цитаты в нужном месте. :-)Я надеюсь, что помогает кто-то.