Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL从另一个SP调用SP_Sql_Variables_Stored Procedures_Set_Declare - Fatal编程技术网

SQL从另一个SP调用SP

SQL从另一个SP调用SP,sql,variables,stored-procedures,set,declare,Sql,Variables,Stored Procedures,Set,Declare,我可以得到一些关于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), @L

我可以得到一些关于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_值

我得到这个错误:

“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时,转换失败


我将值“123”和“Client”用于@IDTest和@Description。

您只能使用这样的函数,不能使用存储过程。存储过程只返回整数值

对于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
    Declare @v_Value VARCHAR(15)
    Set @v_Value = EXEC usp_GetValue @ID,  @Description, @v_Value OUTPUT
如果你坚持要一个SP,这是不合适的,有2种方法

1) 输出参数

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

AS

BEGIN
    SET @Result = @ID + @Description
END
那就叫它:

SET @v_value = dbo.usp_GetValue('John','Doe')  --output: John Doe
    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

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

我认为输出参数应该是正确的方法: 见此帖:


这里没有公认的答案。我仍然感到困惑。我得到了这个错误:将varchar值“123Client”转换为数据类型int时,转换失败。@ConchPoulsen调用您的函数,如
SET@v_value=dbo.usp_GetValue('John','Doe')
。请仔细阅读我的答案