我可以帮助您了解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'不是公认的内置函数名称。
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代码的应用程序中收到此错误:
将varchar值'123Client'转换为数据类型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,有两种方法
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
我的建议是使用功能方法。
答案 1 :(得分: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