sql >> Base de Datos >  >> RDS >> Sqlserver

Procedimiento almacenado EXEC con parámetro flexible para seleccionar recuento (*)... y enviar un correo electrónico

Me siento obligado a informarle que pasar variables a cadenas dinámicas como esta lo deja abierto a inyecciones de SQL. Esta es una mala práctica y, en general, está mal vista a menos que se controle muy estrictamente.

Dicho esto...

Cambie su @MySQL de varchar a nvarchar.

Entonces intenta cambiar esto:

set @MySQL = 'select count(*) from ' [email protected] + ' where ' + @MyWhere 
set @SQL_Count = @MySQL 
set @recordCount = convert(int, @SQL_Count ) -- <<--this is the error

A esto:

set @MySQL = 'select @recordCount=count(2) from ' + @MyTable + ' where ' + @MyWhere 
exec sp_execute @MySQL, N'@recordCount int OUTPUT', @[email protected] OUTPUT