在 SQL Server 2008 (TSQL) 中,我创建了一个如下的存储过程:
CREATE PROCEDURE SP_1_10_2
AS
declare @mostValuableBook nvarchar(255)
SELECT @mostValuableBook = Name
FROM books
WHERE price =
( SELECT MAX(price)
FROM books
WHERE izd LIKE '%BHV%' );
return @mostValuableBook
GO
但是,当我尝试执行它时:
declare @x nvarchar(255)
EXECUTE @x = SP_1_10_2;
SELECT 'The most expensive BHV book:', @x AS 'Name'
GO
我收到错误:
转换 nvarchar 值“Internet”时转换失败
Explorer 3 原始数据类型为 int。
看来问题就出在这条线上
EXECUTE @x = SP_1_10_2;
你能告诉我出了什么问题吗?为什么它试图转换为 int ?
RETURN
不能用于退货nvarchar
/ varchar
就像你一样。 RETURN 用于返回一个整数,这可以表示为某种状态代码 1=True / 0=False。在这里阅读有关退货的更多信息:http://msdn.microsoft.com/en-us/library/ms174998.aspx
在你的情况下,你只需要使用OUTPUT
变量类似于 C# 或 C++ 中的 pass-by-ref。您将变量传递给存储过程,存储过程对其进行修改,然后您将得到预期的结果SELECT...
.
更改它,使您的参数成为输出参数:
CREATE PROCEDURE SP_1_10_2
@mostValueableBook nvarchar(255) output
AS
SELECT @mostValuableBook = Name
FROM books
WHERE price =
( SELECT MAX(price)
FROM books
WHERE izd LIKE '%BHV%' );
SELECT @mostValuableBook
GO
像这样称呼它:
DECLARE @theValBook nvarchar(255)
EXECUTE SP_1_10_2 @mostValuableBook = @theValBook output
然后你可以说:
SELECT 'Most expensive book is', @theValBook
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)