Why does this stored procedure does not work?

All

I have next stored procedure which errors in Conversion failed when converting the varchar value to data type int.

If I change the WHERE-clause to
WHERE dbo.SYSTEM_Serienummers.SN = ''' + @SN + ''' AND ' + @Field + ' IS NOT NULL and dbo.SYSTEM_Serienummers.Reparatienummer < 4
it works. So why doesn't it work if I try to retrieve records where the value is lower than my variable?

ALTER Procedure [dbo].[GetPreviousValueOf]
(
@Field VARCHAR(50),
@SN VARCHAR(50),
	@Reparatienummer int
)
AS
BEGIN

DECLARE @sql nvarchar(1000)

SET @sql = 'SELECT TOP (1) dbo.SYSTEM_Serienummers.SN, dbo.SYSTEM_Serienummers.Reparatienummer, ' + @Field + ' as [output]
FROM            dbo.SYSTEM_Serienummers INNER JOIN
                     dbo.METINGEN ON dbo.SYSTEM_Serienummers.ID = dbo.METINGEN.SerienummerID
WHERE        dbo.SYSTEM_Serienummers.SN = ''' + @SN + ''' AND ' + @Field + ' IS NOT NULL and dbo.SYSTEM_Serienummers.Reparatienummer < ' + @Reparatienummer + '  
order by dbo.SYSTEM_Serienummers.Reparatienummer desc'


--SELECT @sql
exec (@sql)

END

I found the cause. Declared @reparatienummer as varchar(50) and used a cast-function is the where-clause

Don't do that! Just case the int to varchar in the SQL code:

SET @sql = 'SELECT TOP (1) dbo.SYSTEM_Serienummers.SN, dbo.SYSTEM_Serienummers.Reparatienummer, ' + @Field + ' as [output]
FROM            dbo.SYSTEM_Serienummers INNER JOIN
                     dbo.METINGEN ON dbo.SYSTEM_Serienummers.ID = dbo.METINGEN.SerienummerID
WHERE        dbo.SYSTEM_Serienummers.SN = ''' + @SN + ''' AND ' + @Field + ' IS NOT NULL and dbo.SYSTEM_Serienummers.Reparatienummer < ''' + CAST(@Reparatienummer AS varchar(10)) + '''  
order by dbo.SYSTEM_Serienummers.Reparatienummer desc'