Оператор выбора SQL, включая вызов SP, имеет синтаксическую ошибку - PullRequest
2 голосов
/ 17 января 2011

MYTABLE имеет идентификатор столбца. Однако следующий запрос генерирует синтаксическую ошибку.

SELECT ID FROM MYTABLE
WHERE ID = EXEC MY_SP ID

Что, по-твоему, здесь не так?

Ответы [ 4 ]

5 голосов
/ 17 января 2011

Вы не можете вызывать хранимые процедуры встроенными, как это.

Несколько параметров включают в себя: 1) Выполнить хранимую процедуру и сохранить результаты во временной таблице.Затем используйте эту временную таблицу.например,

CREATE TABLE #Example
(
ID INTEGER
)
INSERT #Example
EXECUTE My_SP

SELECT t.ID FROM MyTable t JOIN #Example e ON t.ID = e.ID
DROP TABLE #Example

2) преобразовать sproc в пользовательскую функцию, которую вы можете вызвать inline, например,

CREATE FUNCTION dbo.MyFunc()
    RETURNS TABLE
AS
RETURN
(
    SELECT ID FROM SomeTable WHERE ....
)

SELECT t.ID FROM MyTable t JOIN dbo.MyFunc() f ON t.ID = f.ID

3) Если sproc возвращает один идентификатор, рассмотрите возможность возврата параметра OUTPUTвместо этого от sproc и используйте так:

DECLARE @ID INTEGER
EXECUTE MY_SP @ID OUTPUT

SELECT ID FROM MYTABLE
WHERE ID = @ID
1 голос
/ 17 января 2011

Я не думаю, что вам нужен оператор exec, просто вызовите sp, exec должен быть отдельным оператором

0 голосов
/ 17 января 2011

Попробуйте это:

SELECT ID FROM MYTABLE WHERE ID = @@SPID
0 голосов
/ 17 января 2011

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

...