2012-05-13 2 views
0

У меня есть этот ток SP:Вызов хранимой процедуры не в состоянии из-за неправильного синтаксиса

ALTER PROCEDURE [dbo].[GetHighestDrop] 
    @val1 AS FLOAT , 
    @val2 AS FLOAT , 
    @val3 AS FLOAT 
AS 
BEGIN 
select case when @val1 < @val2 then 
       case when @val1 < @val3 then @val1 
       else @val3 
       end 
     when @val2 < @val3 then @val2 
       else @val3 
    end 
END 

Я зову его с этим синтаксисом:

SELECT 
GetHighestDrop @val1=((clmnA/clmnB)-1)*100,@val2=2,@val3=3 
FROM dbo.tstTable 

clmnA и clmbB содержат числа, если я запускать их по отдельности , как:

SELECT ((clmnA/clmnB)-1)*100 FROM dbo.tstTable 

я получаю результат, который является поплавок, но когда я запускаю его через GetHighestDrop, он терпит неудачу.

Любая идея, почему?

+0

Вместо того, чтобы хранимую процедуру, вы должны создать _function_ для этого. – Oded

ответ

3

Вы можете вызвать только хранимую процедуру с помощью exec. Невозможно запустить хранимую процедуру внутри select.

Рассмотрите возможность преобразования вашей процедуры в scalar user-defined function.

Пример функции использования (не забудьте имя схемы, как правило, «ДБО»):

select dbo.GetHighestDrop(((clmnA/clmnB)-1)*100, 2, 3) as Col1 
from dbo.tstTable 
+0

Я добавил функцию, но она все еще не работает, каков будет синтаксис? –

+0

Добавлен пример запроса, который вызывает скалярную функцию – Andomar

0

не может ли ваша хранимая процедура не возвращать какую-либо ценность? попробуйте функции, которые должны возвращать хотя бы одно значение. если вы хотите использовать хранимые процедуры, вам необходимо добавить параметр out.

Смежные вопросы