将 nvarchar 值“Internet Explorer 3 原始”转换为数据类型 int 时转换失败

2023-12-10

在 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(使用前将#替换为@)

将 nvarchar 值“Internet Explorer 3 原始”转换为数据类型 int 时转换失败 的相关文章

随机推荐