Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

problemas con el SP_executesql

Estas en el tema de problemas con el SP_executesql en el foro de SQL Server en Foros del Web. Hola amigos me pueden ayudar cone sto por favor. Estoy tratando de ejecutar esta consulta con la ayuda del SP sp_executesql pero me manda un ...
  #1 (permalink)  
Antiguo 21/04/2008, 17:09
Avatar de Romi28x  
Fecha de Ingreso: octubre-2007
Mensajes: 185
Antigüedad: 16 años, 6 meses
Puntos: 0
problemas con el SP_executesql

Hola amigos me pueden ayudar cone sto por favor.

Estoy tratando de ejecutar esta consulta con la ayuda del SP sp_executesql pero me manda un error, lo que estoy haciendo es esto...

declare @sql varchar(250)
set @sql='select * from facturas where fecha_fac=convert(datetime,20080421,112) and idCliente=105'
exec sp_executesql @sql


el error que me manda es este...

Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
El procedimiento espera un parámetro '@statement' de tipo 'ntext/nchar/nvarchar'.


ok, entiendo que el error me lo manda por que no llevo entre comillas simple la fecha, pero si le pngo comillas simople me manda este otro error..

Sintaxis incorrecta cerca de '20080421'.


si yo prubo la consulta por si sola con las comillas simple en los datos de fecha me devuelve los datos, como hago para pasar la consulta con todos y sus comillas simple al sp_executesql

select * from facturas where fecha_fac=convert(datetime,'20080421',112) and idCliente=105


gracias
  #2 (permalink)  
Antiguo 21/04/2008, 17:14
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Re: problemas con el SP_executesql

Haber trata de replicar lo de este ejemplo en tu consulta

Cita:
use Northwind
go

declare @sql nvarchar(250)
set @sql='select * from Orders where RequiredDate between ''19960801 00:00:00'' and ''19960801 23:59:59'''
exec sp_executesql @sql
El primer error lo descubres leyendo el mensaje que te bota:

El procedimiento espera un parámetro '@statement' de tipo 'ntext/nchar/nvarchar'.

Te dice que el parámetro sólo recibe datos 'ntext/nchar/nvarchar' y tu le quieres pasar un varchar, modifícalo ahí.

Para el 2do error, cuando coloques ' en sql dinamico tienes que colocar 2 '' para que lo procese como una sóla '.

Siempre leamos el error porque algunas veces no nos indica mucho pero otras si nos ayuda un monton.

Saludos
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #3 (permalink)  
Antiguo 21/04/2008, 18:04
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: problemas con el SP_executesql

¿Algo asi?

declare @sql nvarchar(250)
set @sql='select * from facturas where convert(char(8), fecha_fac, 112) =''20080421'' and idCliente=105'
exec sp_executesql @sql
  #4 (permalink)  
Antiguo 22/04/2008, 09:26
Avatar de Romi28x  
Fecha de Ingreso: octubre-2007
Mensajes: 185
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: problemas con el SP_executesql

Ok amigos muchas gracias a los dos por sus comentarios, ya hice las pruebas y me resulto asi a como lo planteo Iislas.
  #5 (permalink)  
Antiguo 22/04/2008, 10:17
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Re: problemas con el SP_executesql

Para que usais sp_executesql?
Que diferencia hay con exec @sql?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 22/04/2008, 10:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: problemas con el SP_executesql

que EXEC (@String), sera eliminado de versiones superiores, ademas sp_executesql, es un store de sistema que puede recibir PARAMETROS y regresar resultados en variables, cosa que no hace un simple EXEC
  #7 (permalink)  
Antiguo 22/04/2008, 11:19
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Re: problemas con el SP_executesql

Bueno, lo que afirmas lo confirmare en persona cuando empiece a usar la version 2005.
Revisare ese SP. Gracias por la respuesta.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 22/04/2008, 11:55
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: problemas con el SP_executesql

Amigo, este store procedure esta listo desde la version 2000
  #9 (permalink)  
Antiguo 27/10/2009, 09:01
 
Fecha de Ingreso: octubre-2009
Mensajes: 1
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Re: problemas con el SP_executesql

Hola!!
muchas gracias por la respuesta que diste al otro colega, me sirvio mucho, pero tengo otro tema, tal vez me puedas ayudar, no se si está bien ubiado con el tema,
resulta que hago exactamente lo que indicaste en tu respuesta, pero me da el siguiente error

Permiso SELECT denegado para la tabla xxx

me da al ejecutar la siguiente instruccion

exec sp_executesql @Cadena,
N'@valor nvarchar(40)',
@Valor


donde @cadena = 'select campo from xxx where campo = @valor'

hay forma de que no tenga que darle permiso de select para todas las tablas donde uso el sp_executesql??

desde ya muchisimas gracias!!
  #10 (permalink)  
Antiguo 27/10/2009, 11:50
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: problemas con el SP_executesql

Al utilizar QUERY DINAMICO, es algo que se tiene en contra, deberas otorgar los permisos adecuados.
  #11 (permalink)  
Antiguo 03/08/2010, 15:27
 
Fecha de Ingreso: abril-2005
Mensajes: 5
Antigüedad: 19 años
Puntos: 0
Respuesta: problemas con el SP_executesql

Que tal amigos, bueno revisando los comentarios y encontrando una solución a mi problema con el SP_EXECUTESQL en este foro pues lo que yo queria es que funcione con un cursor dinámico , bueno dejo el procedure que he desarrollado a mi necesidad

donde muestro el uso del SP_EXECUTESQL y exec o execute que conocemos

saludos...

ALTER PROCEDURE [dbo].[SSP_RPT_CONSOL_COMUN]
@IDOFICINA VARCHAR(4),
@CONDICION VARCHAR(500),
@GFFILTROS VARCHAR(500)
AS
BEGIN

DECLARE @DESCCOMUNIC VARCHAR(10)
DECLARE @SQL_ALTER NVARCHAR(MAX)
DECLARE @TOT_CONSULTA VARCHAR(20)
DECLARE @COD AS VARCHAR(20)
DECLARE @GF AS VARCHAR(20)
DECLARE @CAMPOS AS VARCHAR(50)
DECLARE @CONT AS INT
DECLARE @CAMP AS VARCHAR(50)
DECLARE @my_cur CURSOR

create table #TABLA_TMP (NRO varchar(20),COD varchar(50),NOMBRES varchar(200),GF varchar(20),EJECUTADO int)

SET NOCOUNT ON;
SET @SQL_ALTER='INSERT INTO #TABLA_TMP
SELECT ROW_NUMBER() OVER(PARTITION BY X ORDER BY NOMBRES ASC) AS NRO ,
COD,NOMBRES,GF,EJECUTADO
FROM (
SELECT (CASE WHEN COD_EMP1 IS NULL OR COD_EMP1='''' THEN ''X'' ELSE COD_EMP1 END) COD,
ISNULL(NOM_EMP1,'''')NOMBRES,GF,
COUNT(*)EJECUTADO,''X'' X
FROM COMUNICADET A
WHERE ESTADO IN(''D'',''E'') AND IDOFICINA='+@IDOFICINA+@CONDICION+' GROUP BY COD_EMP1,NOM_EMP1,GF )A ORDER BY 3'

EXECUTE (@SQL_ALTER)

SET @CONT=0

SET @SQL_ALTER=N'SET @my_cur = CURSOR STATIC FOR
SELECT DESCCOMUNIC FROM TIPOCOMUNIC WHERE ESTADO=''A'' AND IDTIP<>''00'' '+@GFFILTROS+' ORDER BY 1;
OPEN @my_cur'

EXEC sp_executesql
@SQL_ALTER,
N'@my_cur cursor OUTPUT', @my_cur OUTPUT

FETCH NEXT FROM @my_cur

into @DESCCOMUNIC
while @@fetch_status = 0
begin
SET @CONT=@CONT+1

SET @CAMP=@DESCCOMUNIC

IF @CONT=1
SET @CAMPOS=@DESCCOMUNIC
ELSE
BEGIN
IF LEN(LTRIM(RTRIM(@DESCCOMUNIC)))>0
SET @CAMPOS=LTRIM(RTRIM(@CAMPOS))+','+LTRIM(RTRIM(@CAM P))
END

SET @SQL_ALTER='ALTER TABLE #TABLA_TMP ADD '+ @DESCCOMUNIC +' INT'
-- Avanzamos otro registro
EXECUTE(@SQL_ALTER)
SET @SQL_ALTER='UPDATE #TABLA_TMP SET '+ @DESCCOMUNIC +' =0'
EXECUTE(@SQL_ALTER)
/*************************************************/
/*************************************************/
declare CURSOR_TMP cursor for SELECT COD,GF FROM #TABLA_TMP
open CURSOR_TMP
-- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro
fetch next from CURSOR_TMP
into @COD,@GF
while @@fetch_status = 0
begin
SELECT @TOT_CONSULTA=isnull(EJECUTADO,'0') FROM #TABLA_TMP WHERE GF=RTRIM(@DESCCOMUNIC) and cod=rtrim(@COD)

IF len(ltrim(rtrim(@TOT_CONSULTA)))>0
BEGIN
SET @SQL_ALTER='UPDATE #TABLA_TMP SET '+@DESCCOMUNIC+'='+ISNULL(@TOT_CONSULTA,'0') +' WHERE cod=rtrim('''+@COD+''')'
execute(@SQL_ALTER)
SET @COD=''
SET @TOT_CONSULTA=''
SET @SQL_ALTER=''
END
fetch next from CURSOR_TMP
into @COD,@GF
end
-- cerramos el cursor
close CURSOR_TMP
deallocate CURSOR_TMP
/*************************************************/
/*************************************************/

fetch next from @my_cur
into @DESCCOMUNIC
end
-- cerramos el cursor
close @my_cur
deallocate @my_cur

SET @SQL_ALTER=' SELECT ROW_NUMBER() OVER(PARTITION BY X ORDER BY NOMBRES ASC) AS NRO,
COD CODIGO,NOMBRES,'+ISNULL(@CAMPOS,'')+',TOTAL '+
' FROM (SELECT DISTINCT ''X'' X,COD,NOMBRES,'+
ISNULL(@CAMPOS,'')+','+REPLACE(@CAMPOS,',','+')+
' AS TOTAL FROM #TABLA_TMP)A ORDER BY NOMBRES'

execute(@SQL_ALTER)

END
  #12 (permalink)  
Antiguo 03/08/2010, 16:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: problemas con el SP_executesql

ya hemos dicho hasta el cansancio que el 99.99% de las cosas que se hacen con un cursor, se pueden hacer con simple T-SQL.

No more comments
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:22.