stroed procedure doubt | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

stroed procedure doubt

I am writing the following SP, on the query analyzer, it runs correctly and returns 2, which is the expected result, but when I use ASP.NET and call the SP from the form side, it returns 0.<br /><br />CREATE PROCEDURE [dbo].[odItemValuesCount1]<br />(<br />@retval int output,<br />@regdate datetime,<br />@duedate datetime,<br />@categoryname varchar(50),<br />@itemvalue1 varchar(50) = ‘%’,<br />@itemvalue2 varchar(50) = ‘%’,<br />@itemvalue3 varchar(50) = ‘%’,<br />@itemvalue4 varchar(50) = ‘%’,<br />@itemvalue5 varchar(50) = ‘%’,<br />@itemvalue6 varchar(50) = ‘%’,<br />@itemvalue7 varchar(50) = ‘%’,<br />@itemvalue8 varchar(50) = ‘%’, <br />@itemvalue9 varchar(50) = ‘%’,<br />@itemvalue10 varchar(50) = ‘%'<br />)<br />AS<br />–begin transaction<br />select @retval = 0<br />declare @count int<br />select @count =0<br /><br /><br />declare itemcatid1 cursor for<br />select System_itemCategoryID from odItemCategory where names = @categoryname<br /><br />declare @itemcatid1 int<br />open itemcatid1<br />fetch itemcatid1 into @itemcatid1<br />close itemcatid1<br />deallocate itemcatid1<br /><br />declare @count1 int<br /><br />/* counts all items whethere they are available, reserved or rented from the database*/<br /><br />set @count1 = (select count (*) from odItem where System_itemID IN (<br />SELECT distinct (odItemProperties.System_itemID)<br />FROM odItemProperties<br />WHERE (<br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue1))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue2))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue3))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue4))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue5))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue6))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue7))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue<img src=’/community/emoticons/emotion-11.gif’ alt=’8)’ />)<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue9))<br />AND <br />(System_itemID IN (SELECT System_itemID FROM odItemProperties where itemValue LIKE @itemvalue10))<br /> <br /><br /><br />) and (System_itemStatusID = 1 or System_itemStatusID = 2 or System_itemStatusID = 5) and System_itemCategoryID = @itemcatid1 and deleted = 0))<br /><br />/* */<br />declare itemid1 cursor read_only for<br /><br />SELECT distinct (odItemProperties.System_itemID)<br />FROM odItemProperties, odItem<br />WHERE (<br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue1))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue2))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue3))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue4))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue5))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue6))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue7))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue<img src=’/community/emoticons/emotion-11.gif’ alt=’8)’ />)<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue9))<br />AND <br />(odItemProperties.System_itemID IN (SELECT odItemProperties.System_itemID FROM odItemProperties where itemValue LIKE @itemvalue10))<br />and<br />odItem.System_itemCategoryID = @itemcatid1<br /> <br />) <br /><br />–print @count1<br /><br />declare @count2 int<br />select @count2 = 0<br /><br /><br />declare @count3 int<br />select @count3 = 0<br /><br />declare @itemid as int<br />open itemid1<br />fetch next from itemid1 into @itemid<br /><br />declare itemcatid cursor for <br /><br />select System_itemCategoryID from odItem where System_itemID = @itemid<br /><br />declare @itemcatid as int<br />open itemcatid<br />fetch itemcatid into @itemcatid<br />close itemcatid<br />deallocate itemcatid<br /><br /><br />while (@@fetch_status &lt;&gt; -1)<br />begin<br />if( (select System_itemID from odTripsItem where System_itemID = @itemid and deleted = 0 and odTripsItem.System_tripID IN <br />(select odPersonalTrips.System_tripID from odPersonalTrips where @duedate &gt;= registrationDate and @regdate &lt;= dueDate )) = 1 )<br />begin<br />set @count2 = @count2 + 1<br />end<br /><br /><br /><br />fetch next from itemid1 into @itemid<br />end<br />close itemid1<br />deallocate itemid1<br />–print @count2<br /><br /><br />declare count3 cursor for <br />select reservedQuantity from odTripsItemCategory where System_itemcategoryID = @itemcatid and deleted = 0 and odTripsItemCategory.System_tripID IN<br />(select odPersonalTrips.System_tripID from odPersonalTrips where @duedate &gt;= registrationDate and @regdate &lt;= dueDate)<br /><br />open count3<br />fetch count3 into @count3<br />close count3<br />deallocate count3<br /><br /><br /><br />–print @count3<br /><br />declare @temp int<br />select @temp = @count1 – @count2<br /><br />–select @count = 4<br />–print @count<br /><br />–return @count<br /><br />–select @retval = @count<br /><br />select @retval = @temp – @count3<br />print @retval<br />–commit<br />return @retval<br />GO<br />
Remove all PRINT lines from your stored procedures. Client apps often have problems dealing with those PRINTs. Only use PRINT for debugging through QA.
You have to explicitly define retValue parameter as output parameter in stored procedure call. How do you actuall check @retValue value? For output parameter it is enough to assign a value. RETURN keyword is used to return an integer value as kind of execution status code. So this value is defined on the client as return code or return value type parameter (not sure). There is no need to define it both as output parameter and return it with return statement.
Removed all the print statements, also used just "return" instead of "return @retval" as suggested in other post, but didnt work
Did you follow up on Mirko’s first remark? DECLARE @1 INT, @2 DATETIME, @3 DATETIME
SET …………………………. EXEC dbo.odItemValuesCount1 @1 OUTPUT, @2, @3 After the EXEC, your local variable @1 will contain the value returned by the procedure.

Have you addressed the problem of how paramaters are specified in asp.Net code?
This is how I call it from the form side availableQuantity=Db.odItemCollection.AvailableQuantityOfItem(DateTime.Parse(txtReserveDate.Text),
DateTime.Parse(txtDueDate.Text), drowItem["ItemCategory"].ToString(), properties);
And odItemCollection has the SP as: SqlParameter[] prams = { SqlHelperUtil.MakeOutParam("@retval", SqlDbType.Int, 4),
SqlHelperUtil.MakeInParam("@regdate", SqlDbType.DateTime,8, regdate),
SqlHelperUtil.MakeInParam("@dueDate", SqlDbType.DateTime,8,dueDate),
SqlHelperUtil.MakeInParam("@categoryname", SqlDbType.VarChar,50,categoryName),
SqlHelperUtil.MakeInParam("@itemvalue1", SqlDbType.VarChar,50, properties[0]),
SqlHelperUtil.MakeInParam("@itemvalue2", SqlDbType.VarChar,50, properties[1]),
SqlHelperUtil.MakeInParam("@itemvalue3", SqlDbType.VarChar,50, properties[2]),
SqlHelperUtil.MakeInParam("@itemvalue4", SqlDbType.VarChar,50, properties[3]),
SqlHelperUtil.MakeInParam("@itemvalue5", SqlDbType.VarChar,50, properties[4]),
SqlHelperUtil.MakeInParam("@itemvalue6", SqlDbType.VarChar,50, properties[5]),
SqlHelperUtil.MakeInParam("@itemvalue7", SqlDbType.VarChar,50, properties[6]),
SqlHelperUtil.MakeInParam("@itemvalue8", SqlDbType.VarChar,50, properties[7]),
SqlHelperUtil.MakeInParam("@itemvalue9", SqlDbType.VarChar,50, properties[8]),
SqlHelperUtil.MakeInParam("@itemvalue10", SqlDbType.VarChar,50, properties[9])}; try
{
int RunProcReturn = SqlHelper.ExecuteNonQuery(IUOA.Db.SQLConnection.GetConnectString(),CommandType.StoredProcedure, "dbo.odItemValuesCount1",prams);
RetVal = (int) prams[0].Value;
}
]]>