0

我可以对 SQL 中 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 来设置声明变量的值。

我不确定语法。我可以帮忙吗?

更新

我已经使用你的函数更新了我上面的代码。如何从 usp_GetValue 函数设置 @v_Value。

我收到此错误:

“usp_GetValue”不是可识别的内置函数名称。

更新2

这是我的完整代码:

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 代码的应用程序中收到此错误:

将 varchar 值“123Client”转换为数据类型 int 时转换失败。

我为@IDTest 和@Description 使用值“123”和“Client”。

4

2 回答 2

0

我认为输出参数应该是正确的方法:见这篇文章: 存储过程返回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
于 2013-07-20T14:13:11.643 回答
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,有两种方法

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

我的建议是使用函数方法。

于 2013-07-20T13:52:02.707 回答