2013-07-20 99 views
0

我可以幫助您使用SQL中SP的語法。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

我已經更新了我的使用功能上面的代碼。如何從usp_GetValue函數中設置@v_Value。

我收到此錯誤:

'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.

我爲@IDTest和@Description使用值「123」和「Client」。

+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)out參數

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

順便說一句 - 不要使用()時傳遞參數給SP ...看看我的例子... – 2013-07-20 14:16:24

+0

我得到這個錯誤:轉換失敗時,varchar值'123Client'轉換爲數據類型int 。 –