2013-07-25 1 views
-3

Есть ли способ подавить все результаты из набора результатов хранимой процедуры?Сохраненная процедура T-SQL Получить результат не

У этого есть как EXEC, так и операторы SELECT.

Редактировать: Позвольте мне объяснить мою проблему немного больше.

В заявлении EXEC используется DTSRun, который извлекает данные из серверов ERP и MySQL в временные таблицы SQL. Как только данные находятся в временных таблицах. Существует инструкция Select, которая возвращает данные, сгенерированные пользователем. Пользователь представляет собой базу данных MS Access, которая отправляет ее фактическому клиенту по электронной почте. Все вызвано кнопкой веб-страницы на стороне клиента с помощью «Получить отчет».

Я хочу подавить первый результат набора результатов EXEC, потому что я не хочу, чтобы клиент видел выход DTS.

В противном случае просто подавите все, чтобы MS Access выполнил хранимую процедуру, а затем просто вытащил оператор SELECT.

Есть, вероятно, 10 лучших способов делать то, что я делаю. Но я просто хотел знать, как подавить результирующий набор инструкции EXEC, все еще запуская его.

+1

Какой смысл его запускать? Вам нужны значения из выходных параметров? Пожалуйста, объясните мотивацию вопроса. –

+1

Вы имеете в виду под «подавлять все результаты», чтобы вообще не иметь никаких результатов или вы хотите вернуть только заголовки, но без строк данных? – PAC

+0

EXEC запускает DTSRun, и выбор выбирает выходной сигнал из DTSRun. – Overseer10

ответ

3
SET FMTONLY ON; 
GO 
EXEC sp_who; 

Однако у него есть побочные эффекты и странные проблемы. Например, в SQL Server 2012, по крайней мере, если ваша процедура имеет таблицу #temp, вы получаете недопустимую ошибку имени объекта. Erland Sommarskog goes into a lot more detail here (просто найдите страницу для FMTONLY).

Учитывая ваши обновления (я понятия не имел, что вы пытаетесь подавить вывод вызова DTSRun), я думаю, что лучший ответ: добавьте флаг в свою хранимую процедуру, а затем в зависимости от значения флага используйте NO_OUTPUT аргумент xp_cmdshell:

ALTER PROCEDURE dbo.Whatever 
    @SuppressDTSOutput BIT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    ... 

    IF @SuppressDTSOutput = 1 
    BEGIN 
    EXEC master..xp_cmdshell 'DTSRun.exe whatever', NO_OUTPUT; 
    END 
    ELSE 
    BEGIN 
    EXEC master..xp_cmdshell 'DTSRun.exe whatever'; 
    END 

    ... 
END 
GO 
+0

Я нахожусь на SQL Server 2000. Если я устанавливаю SET FMTONLY ON; утверждение EXEC не будет выполнено соответствующим образом. – Overseer10

+1

Затем укажите более подробные сведения в вопросе (а также объясните, что означает «не выполнять соответствующим образом»). –

1

Вы можете оформить SET FMTONLY ON Statememt

Это подавляет ResultSet.

0

Обычно существует только два способа получить результат из хранимой процедуры

1) Оператор Select 2) ВЫВОД ключевое слово

Наиболее удобный способ подавить результат, который я обычно использую, чтобы сохранить результат в виде таблицы или столбца значение переменной (пример ниже)

DECLARE @REF_Tool_Property_Name УАКСНАК (20) ВЫБОР @REF_Tool_Property_Name = Tool_Property_Name ОТ Tool_Property WHERE Tool_Property_Name = @Member