Are*_*yst 2 t-sql int nvarchar execute
在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
Run Code Online (Sandbox Code Playgroud)
但是,当我试图执行它时:
declare @x nvarchar(255)
EXECUTE @x = SP_1_10_2;
SELECT 'The most expensive BHV book:', @x AS 'Name'
GO
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
将nvarchar值'Internet Explorer 3 original'转换为数据类型int时转换失败.
似乎问题就在于此
EXECUTE @x = SP_1_10_2;
Run Code Online (Sandbox Code Playgroud)
你能告诉我什么是错的吗?为什么要尝试转换为int?
RETURN不能用来返回nvarchar/ varchar如你所拥有.RETURN用于返回一个整数,这可以表示为某种状态代码1 = True/0 = False.阅读更多关于返回的信息:http://msdn.microsoft.com/en-us/library/ms174998.aspx
在您的情况下,您只需要使用OUTPUT类似于C#或C++中的pass-by-ref的变量.您将变量传递给sproc,sproc修改它,然后在a之后得到预期的结果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
Run Code Online (Sandbox Code Playgroud)
这样称呼它:
DECLARE @theValBook nvarchar(255)
EXECUTE SP_1_10_2 @mostValuableBook = @theValBook output
Run Code Online (Sandbox Code Playgroud)
然后你可以说:
SELECT 'Most expensive book is', @theValBook