2013-07-20 5 views
0

Могу ли я получить некоторую помощь в синтаксисе SP в SQL.SQL вызывает SP из другого SP

Вот мой код:

CREATE PROCEDURE usp_GetValue 
(
    @ID VARCHAR(10), 
    @Description VARCHAR(10) 
) 

AS 

BEGIN 
    return @ID + @Description 
END 

CREATE PROCEDURE usp_InsertValue 
(
    @ID VARCHAR(10), 
    @FirstName VARCHAR(50), 
    @LastName VARCHAR(50), 
    @Description VARCHAR(10), 
    @Comment VARCHAR(max) 
) 

AS 

BEGIN 
    Declare @v_Value VARCHAR(15) 
    Set @v_Value = usp_GetValue(@ID, @Description) 

END 

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

Я не уверен в синтаксисе. Могу ли я, пожалуйста, помочь?

UPDATE

Я обновил свой код выше, используя вашу функцию. Как установить @v_Value из функции usp_GetValue.

Я получаю эту ошибку:

'usp_GetValue' is not a recognized built-in function name.

UPDATE2

Вот мой полный код:

CREATE PROCEDURE usp_PersonCategoryLookupTesting 
(
    @ID VARCHAR(10), 
    @Description VARCHAR(10), 
    @res VARCHAR(10) OUTPUT 
) 

AS 

BEGIN 
    return @ID + @Description 
END 

CREATE PROCEDURE usp_InsertPersonTesting 
(
    @IDTest VARCHAR(10), 
    @FirstName VARCHAR(50), 
    @LastName VARCHAR(50), 
    @AddressLine1 VARCHAR(50), 
    @AddressLine2 VARCHAR(50), 
    @AddressLine3 VARCHAR(50), 
    @MobilePhone VARCHAR(20), 
    @HomePhone VARCHAR(20), 
    @Description VARCHAR(10), 
    @Comment VARCHAR(max) 
) 

AS 

BEGIN 
    Declare @PersonCategory VARCHAR(15) 
    EXEC usp_PersonCategoryLookupTest @ID, @Description, @PersonCategory 
    INSERT INTO Person(FirstName, LastName, AddressLine1, AddressLine2, AddressLine3, MobilePhone, HomePhone, DateModified, PersonCategory, Comment) 
    VALUES (@FirstName, @LastName, @AddressLine1, @AddressLine2, @AddressLine3, @MobilePhone, @HomePhone, GETDATE(), @PersonCategory, @Comment) 
END 

Я получаю эту ошибку в моем приложении, вызывающей SQL код:

Conversion failed when converting the varchar value '123Client' to data type int.

Я использую значения «123» и «Клиент» для @IDTest и @Description.

+0

Там нет ответа там принято. Я все еще смущен. –

ответ

0

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

Для SP вам необходимо создать параметры для извлечения значений. Для этого сценария, то лучше создать функцию

CREATE FUNCTION usp_GetValue 
(
    @ID VARCHAR(10), 
    @Description VARCHAR(10), 
) 
RETURNS VARCHAR(50) 
AS 

BEGIN 
    return @ID + @Description 
END 

Затем вызовите его:

SET @v_value = dbo.usp_GetValue('John','Doe') --output: John Doe 

Если вы настаиваете вы хотите SP, который не является правильным для этого есть 2 способа

1) Аут параметр

CREATE PROCEDURE usp_GetValue 
(
    @ID VARCHAR(10), 
    @Description VARCHAR(10), 
    @Result varchar(20) OUTPUT 
) 

AS 

BEGIN 
    SET @Result = @ID + @Description 
END 

Затем вызовите его:

Declare @v_Value VARCHAR(15) 
    Set @v_Value = EXEC usp_GetValue @ID, @Description, @v_Value OUTPUT 

2) Выберите из него

CREATE PROCEDURE usp_GetValue 
(
    @ID VARCHAR(10), 
    @Description VARCHAR(10) 
) 

AS 

BEGIN 
    SELECT @ID + @Description 
END 

Используйте это так:

declare @tempresult as table(v_value as varchar(15)) 

INSERT INTO @tempresult 
    EXEC usp_GetValue @ID, @Description 

Select Top 1 @v_value = v_value From @tempresult 

Мой совет является использование функции подход.

+0

Можете ли вы посмотреть мое обновление? –

+0

@ConchPoulsen Вызовите свою функцию как 'SET @v_value = dbo.usp_GetValue ('John', 'Doe')'. Также внимательно прочитайте мой ответ – codingbiz

0

Я думаю, что выходные параметры должны быть надлежащим образом: Смотрите этот пост: stored procedure returns varchar

CREATE PROCEDURE usp_GetValue 
(
    @ID VARCHAR(10), 
    @Description VARCHAR(10), 
    @res VARCHAR(10) OUTPUT 
) 

AS 

BEGIN 
    return @ID + @Description 
END 

CREATE PROCEDURE usp_InsertValue 
(
    @ID VARCHAR(10), 
    @FirstName VARCHAR(50), 
    @LastName VARCHAR(50), 
    @Description VARCHAR(10), 
    @Comment VARCHAR(max) 
) 

AS 

BEGIN 
    Declare @v_Value VARCHAR(15) 
    EXEC usp_GetValue @ID, @Description, @v_Value 
    -- use @v_Value here... 

END 
+0

BTW - не используйте() при передаче параметров в SP ... посмотрите на мой пример ... –

+0

Я получаю эту ошибку: Ошибка преобразования при преобразовании значения varchar '123Client' в тип данных int , –

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