将nvarchar值'Internet Explorer 3 original'转换为数据类型int时转换失败

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?

Jon*_*onH 6

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