вызывать хранимую процедуру в предложении IN в SQL Server? - PullRequest
2 голосов
/ 10 февраля 2011

Можно ли вызвать хранимую процедуру в предложении IN?

Select field0, field2 FROM Table
WHERE field0 in (exec storedproc)

Причина хранимой процедуры заключается в ее сложности

Ответы [ 3 ]

4 голосов
/ 10 февраля 2011

Для этого вам может понадобиться OpenRowset .

Select Field0, Field2 From Table
Where Field0 in (
                SELECT Field0 FROM OPENROWSET('SQLNCLI', 
                             'Server=SERVERNAME;Trusted_Connection=yes;',
                            'EXEC StoredProc')
                )

Для этого на сервере должны быть включены следующие опции:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

Если невозможно изменить эти настройки, то другой вариант, как обсуждалось с Мартином в комментариях, - это заполнить временную таблицу.

например,

declare @t table
(
Field0 int,
Field1 varchar(100)
...
)

Insert Into @t
Exec storedProcedure

Select Field0, Field2 From Table
Where Field0 in (
                SELECT Field0 FROM @t
                )

ВставитьРезультаты хранимой процедуры для временной таблицы. Определение временной таблицы должно точно соответствовать результатам хранимой процедуры.

2 голосов
/ 10 февраля 2011

Вы не можете использовать сохраненный процесс. Вам нужно использовать функцию, которая возвращает таблицу. Например:

CREATE FUNCTION myFunction(@arg varchar(30))
RETURNS @myTable table(Value INT)
AS
BEGIN
    insert into @myTable(Value) values (1)       
    RETURN
END

Теперь вы можете запустить функцию как часть вашего запроса:

Select field0, field2 FROM Table
WHERE field0 in (select Value from myFunction('arg'))
2 голосов
/ 10 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...