In SQL Server 2008 (TSQL), I’ve created a stored procedure like this:
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
But, when I’m trying to execute it:
declare @x nvarchar(255)
EXECUTE @x = SP_1_10_2;
SELECT 'The most expensive BHV book:', @x AS 'Name'
GO
I’m getting an error:
Conversion failed when converting the nvarchar value ‘Internet
Explorer 3 original’ to data type int.
It seems like the problem is in the line
EXECUTE @x = SP_1_10_2;
Can you please tell me what’s wrong? Why is it trying to convert to int?
RETURNcannot be used to returnnvarchar/varcharsuch as you have. RETURN is used to return an integer, this can be expressed as some sort of status code 1=True / 0=False. Read more about return here: http://msdn.microsoft.com/en-us/library/ms174998.aspxIn your case, you simply need to use
OUTPUTvariables which is similiar to pass-by-ref in C# or C++. You pass the variable to the sproc, the sproc modifies it, and you get the expected results after aSELECT....Change it so that your parameters becomes an output parameter:
Call it like so:
Then you can say:
SELECT 'Most expensive book is', @theValBook