7

I do not know how to resolve this error:

Conversion failed when converting the varchar value
'SELECT LastName,FirstName FROM ##Results WHERE ##RowNum BETWEEN(' to data type int.

Query is:

SET @s_query = 'SELECT ' + @ColNames1 + ' FROM ##Results
WHERE ##RowNum BETWEEN('+@PageIndex1+'-1) * '+@PageSize1+' + 1 
AND((('+@PageIndex1+' -1) * '+@PageSize1+' + 1) + '+@PageSize1+') - 1';
1
  • 3
    cast @PageIndex1 to varchar because you want to populate a string s_query Commented Feb 20, 2014 at 11:45

2 Answers 2

9
DECLARE @s_query   NVARCHAR(MAX);
DECLARE @ColNames1 NVARCHAR(MAX) = 'Some_Column'
DECLARE @PageIndex1 INT = 10;
DECLARE @PageSize1  INT = 20;

SET @s_query =  N'SELECT ' + QUOTENAME(@ColNames1) + N' FROM ##Results
                WHERE RowNum BETWEEN('+CAST(@PageIndex1 AS NVARCHAR)+ N'-1) * '
                + CAST(@PageSize1 AS NVARCHAR)+ N' + 1 AND((('+ CAST(@PageIndex1 AS NVARCHAR)+ N' -1) * '
                + CAST(@PageSize1  AS NVARCHAR)+ N' + 1) + '+ CAST(@PageSize1 AS NVARCHAR)+ N') - 1';

PRINT @s_query

SELECT [Some_Column] FROM ##Results
WHERE RowNum BETWEEN(10-1) * 20 + 1 AND(((10 -1) * 20 + 1) + 20) - 1
Sign up to request clarification or add additional context in comments.

Comments

7

You're building a string and put its result in @s_query variable.

So you must convert your int variable as @PageIndex1 and @PageSize1, in this way:

SET @s_query =  'SELECT ' + @ColNames1 + ' FROM ##Results
WHERE ##RowNum BETWEEN('+CONVERT(varchar(20), @PageIndex1)+'-1) * '+CONVERT(varchar(20),@PageSize1)+' + 1 
AND((('+CONVERT(varchar(20),@PageIndex1)+' -1) * '+CONVERT(varchar(20),@PageSize1)+' + 1) + '+CONVERT(varchar(20),@PageSize1)+') - 1';

If you want maintain the readability of your code you can define two variables:

DECLARE @pistr varchar(20)
DECLARE @psstr varchar(20)

SET @pistr = CONVERT(varchar(20), @PageIndex1)
SET @psstr = CONVERT(varchar(20), @PageSize1)

So your query becomes:

SET @s_query =  'SELECT ' + @ColNames1 + ' FROM ##Results
WHERE ##RowNum BETWEEN('+ @pistr +'-1) * '+@psstr+' + 1 
AND((('+@pistr+' -1) * '+@psstr+' + 1) + '+@psstr+') - 1';

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.