|
Question : stored procedure error: Conversion failed when converting the nvarchar value
|
|
I have the following SP: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [elevenboutique].[CategorySelectByClassID] ( @sortExpression nvarchar(50), @startRowIndex INT, @maximumRows INT, @ClassID INT ) AS IF LEN(@sortExpression) = 0 SET @sortExpression = 'CategoryName'
-- Since @startRowIndex is zero-based in the data Web control, but one-based w/ROW_NUMBER(), increment SET @startRowIndex = @startRowIndex + 1 DECLARE @sql nvarchar(4000)
SET @sql ='SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY ' + @sortExpression + ') as RowNum FROM Category WHERE (ClassID = ' + CAST(@ClassID AS INT) + ')) AS Category WHERE RowNum BETWEEN ' + CONVERT(nvarchar(10), @startRowIndex) + ' AND (' + CONVERT(nvarchar(10), @startRowIndex) + ' + ' + CONVERT(nvarchar(10), @maximumRows) + ') - 1'
-- Execute the SQL query EXEC sp_executesql @sql
When I try to execute it with the following: EXEC CategorySelectByClassID 'CategoryName',0,100,305
I get the following error: Msg 245, Level 16, State 1, Procedure CategorySelectByClassID, Line 16 Conversion failed when converting the nvarchar value 'SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY CategoryName) as RowNum FROM Category WHERE (ClassID = ' to data type int.
If I simply try to run this code I get no errors: SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY CategoryName) as RowNum FROM Category WHERE (ClassID = 305)) AS Category
|
|
Answer : stored procedure error: Conversion failed when converting the nvarchar value
|
|
The problem is in this code part i think: SET @sql ='SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY ' + @sortExpression + ') as RowNum FROM Category WHERE (ClassID = ' + CAST(@ClassID AS INT) + '))
instead of casting the @classID to INT (what it allready is), you should cast it to varchar(15) or so (I do not know how long it can be). So replace that with
WHERE (ClassID = ' + CAST(@ClassID AS varchar(15)) + '))
and i guess it should be OK
|
|
|
|