У меня есть хранимая процедура, которая возвращает строки:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
Моя настоящая процедура немного сложнее, поэтому необходим sproc.
Можно ли выбрать выход, вызвав эту процедуру?
Что-то вроде:
SELECT * FROM (EXEC MyProc) AS TEMP
Мне нужно использовать SELECT TOP X
, ROW_NUMBER
и дополнительный WHERE
пункт на странице мои данные, и я не хочу , чтобы передать эти значения в качестве параметров.
sql
sql-server
sql-server-2005
stored-procedures
jonathanpeppers
источник
источник
Ответы:
Вы можете использовать пользовательскую функцию или представление вместо процедуры.
Процедура может возвращать несколько результирующих наборов, каждый со своей схемой. Это не подходит для использования в
SELECT
утверждении.источник
Ты можешь
... sql ....
источник
INSERT #T
илиINSERT @T
в том , чтоINSERT EXEC
оператор не может быть вложенными. Если хранимая процедура уже содержитINSERT EXEC
в себе, это не будет работать.Вам нужна либо функция с табличным значением, либо вставьте EXEC во временную таблицу:
источник
INSERT #T
илиINSERT @T
в том , чтоINSERT EXEC
оператор не может быть вложенными. Если хранимая процедура уже содержитINSERT EXEC
в себе, это не будет работать.Вы должны прочитать об OPENROWSET и OPENQUERY
источник
Вам необходимо объявить тип таблицы, который содержит такое же количество столбцов, которое возвращает процедура вашего хранилища. Типы данных столбцов в типе таблицы и столбцов, возвращаемых процедурами, должны быть одинаковыми
Затем вам нужно вставить результат вашей хранимой процедуры в тип таблицы, который вы только что определили
В конце просто выберите из вашего типа таблицы
источник
Не обязательно использовать временную таблицу.
Это мое решение
источник
sp_serveroption 'MYSERVER', 'DATA ACCESS', TRUE;
Вы можете скопировать вывод из sp в временную таблицу.
источник
используйте OPENQUERY и перед исполнением set 'SET FMTONLY OFF; ВКЛЮЧИТЕ NOCOUNT; '
Попробуйте этот пример кода:
источник
Попробуйте преобразовать вашу процедуру во встроенную функцию, которая возвращает таблицу следующим образом:
И тогда вы можете назвать это как
У вас также есть возможность передачи параметров в функцию следующим образом:
И называть это
источник
Если «Доступ к данным» ложь,
после,
оно работает.
источник
Вы можете немного обмануть с OPENROWSET:
Конечно, каждый раз запускается весь SP.
источник
Для простоты и возможности повторного запуска я использовал систему StoredProcedure sp_readerrorlog для получения данных:
источник
Похоже, вам просто нужно использовать представление . Представление позволяет представить запрос в виде таблицы, чтобы его можно было запрашивать.
источник
Если ваш сервер называется SERVERX, например, я так и сделал ...
Чтобы убедиться, что это работает, я закомментировал
EXEC()
командную строку и заменил ееSELECT @CMD
на просмотр команды перед тем, как пытаться ее выполнить! Это должно было гарантировать, что все правильное количество одинарных кавычек было в правильном месте. :-)Я надеюсь, что это помогает кому-то.
источник