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

[SOLUCIONADO] Procedimiento almacenado que reciba como parámetros el nombre de la tabla

Estas en el tema de Procedimiento almacenado que reciba como parámetros el nombre de la tabla en el foro de SQL Server en Foros del Web. Hola a todos. Tengo un procedimiento almacenado con un select común muy sencillo. Lo que pretendo hacer es que ese procedimiento almacenado reciba el nombre ...
  #1 (permalink)  
Antiguo 02/01/2014, 14:09
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Procedimiento almacenado que reciba como parámetros el nombre de la tabla

Hola a todos.

Tengo un procedimiento almacenado con un select común muy sencillo.

Lo que pretendo hacer es que ese procedimiento almacenado reciba el nombre de la tablas a las que quiero hacer referencia.

Es posible esto?
Como lo puedo meter en mi procedimiento almacenado?
  #2 (permalink)  
Antiguo 02/01/2014, 14:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado qeu reciba como parametros el nombre de la tabla

sip con un query dinamico, esto ya se ha explicado varias veces pero ahi va de nuevo.


Código SQL:
Ver original
  1. CREATE PROCEDURE mi_proc (@name VARCHAR(30))
  2. AS
  3. DECLARE @query Nvarchar(MAX)
  4. SET @query='select * from ' + @name
  5. EXEC sp_executesql @query
  6.  
  7. EXEC mi_proc 'table_name'

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/01/2014, 15:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado qeu reciba como parametros el nombre de la tabla

y te sirvio no te sirvio? lo viste no lo viste???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 02/01/2014, 16:12
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado qeu reciba como parametros el nombre de la tabla

Cita:
Iniciado por Libras Ver Mensaje
y te sirvio no te sirvio? lo viste no lo viste???
Aa lo he intentado señor libras je pero algo estoyhaciendo mal.


Código SQL:
Ver original
  1. SET @st1 = '(select distinct(NOMBRE) FROM '+@gbl+' GB INNER JOIN '+ @AÑOQUIN +' PRD ON GB.RFCH = PRD.RFCH  WHERE  GB.QNAPROC =@QUINCENA   AND GB.RFCH = @RFC)'
  2. EXEC sp_executesql @st1

me dice error cerca del joi pero no lo veo
  #5 (permalink)  
Antiguo 02/01/2014, 16:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

puedes poner un ejemplo con los declare de las variables dentro de la cadena y los valores de las mismas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 02/01/2014, 16:43
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

SI CLARO

Código SQL:
Ver original
  1. EXEC PA_PRUEBA2 '18','SARB8511174P7', 'gbl2013', 'prd1318','BEATRIZ BERENI'
  2.  
  3.  
  4. ALTER PROC [dbo].[PA_PRUEBA2]
  5.  
  6. @QUINCENA nVARCHAR(50),
  7. @RFC nVARCHAR(50),
  8. @GBL nVARCHAR(50),
  9. @AÑOQUIN nVARCHAR(50),
  10. @NOMBRE NVARCHAR(200)
  11.   AS
  12. DECLARE @st1 nVARCHAR(MAX),@TAM_ULT INT, @TAMAÑO INT, @TAM_PRIMERO INT, @QUERY nVARCHAR(30)
  13.  
  14.  
  15. SET @st1 = 'select distinct(NOMBRE) FROM '+@gbl+' GB INNER JOIN '+ @AÑOQUIN +' PRD ON GB.RFCH = PRD.RFCH  WHERE GB.QNAPROC ='+@QUINCENA +'   AND PRD.RFCH = ' + @RFC
  16. EXEC sp_executesql @st1
  #7 (permalink)  
Antiguo 02/01/2014, 16:49
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

El error dice
Cita:
Mens. 207, Nivel 16, Estado 1, Línea 1
El nombre de columna 'SARB8511174P7' no es válido.
  #8 (permalink)  
Antiguo 02/01/2014, 16:49
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

Si le quito el @rfch no me manda ningun error pero no entiendo porque si se lo pongo tengo ese problema
  #9 (permalink)  
Antiguo 02/01/2014, 17:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

prueba con esto:

Código SQL:
Ver original
  1. SET @st1 = 'select distinct(NOMBRE) FROM '+@gbl+' GB INNER JOIN '+ @AÑOQUIN +' PRD ON GB.RFCH = PRD.RFCH  WHERE GB.QNAPROC ='+@QUINCENA +'   AND PRD.RFCH = ' + CHAR(39) +  @RFC + CHAR(39)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 03/01/2014, 09:18
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

Siiiiiiii!!!!! Si funciona.

Por qué es necesario poner los char(39)?
  #11 (permalink)  
Antiguo 03/01/2014, 09:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

Porque una cadena de texto debe quedar entre comillas, y la sentencia que habías puesto dejaba el contenido de @RFC como si fuese el nombre de una columna.
Eso era evidente en el mensaje de error:
Cita:
Mens. 207, Nivel 16, Estado 1, Línea 1
El nombre de columna 'SARB8511174P7' no es válido.
"no es válido" es indicativo de que no existe o es incorrecto, y dado que eso era lo que contenía @RFC...

Se puede ver perfectamente si reemplazas las variables de tu script con los valores que reciben las mismas. Al hacerlo el SQL quedaría así:
Código SQL:
Ver original
  1. SELECT DISTINCT(NOMBRE)
  2. FROM gbl2013 GB INNER JOIN prd1318 PRD ON GB.RFCH = PRD.RFCH  
  3. WHERE GB.QNAPROC = 18   AND PRD.RFCH = SARB8511174P7

¿Ves el error?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/01/2014 a las 09:43
  #12 (permalink)  
Antiguo 03/01/2014, 10:23
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

MMm estoy intentando hacer otra consulta que es un poco mas extensa
Mi problema ahora esque me manda un error de comillas pero estoy utilizando un replace para que me quite los ceros y me los sustituya con un vacio.

Este es el error
Cita:
Falta la comilla de cierre después de la cadena de caracteres ') as DATITO,
GB.CENRES
FROM GBL2013 GB INNER JOIN PRD1318 PRD ON GB.RFCH = PRD.RFCH
WHERE GB.QNAPROC =18
AND GB.IDDESNOM >=11 AND GB.IDDESNOM <= 13'.

Y esta es mi consulta SQL
Código SQL:
Ver original
  1. SET @QUERY = 'SELECT
  2. SUBSTRING(nombre,0, CHARINDEX('+CHAR(39)+ CHAR(44)+CHAR(39)+',nombre)),
  3. SUBSTRING(NOMBRE ,CHARINDEX('+CHAR(39)+CHAR(47)+CHAR(39)+',NOMBRE )+1,LEN(nombre)),
  4. SUBSTRING(nombre,CHARINDEX(' +CHAR(39)+CHAR(44)+CHAR(39)+',nombre)+1,((LEN(NOMBRE))-(LEN(SUBSTRING(NOMBRE ,CHARINDEX('+CHAR(39)+CHAR(47)+CHAR(39)+', NOMBRE)+1,LEN(NOMBRE))))-(LEN(SUBSTRING(NOMBRE ,0, CHARINDEX('+CHAR(39)+CHAR(44)+CHAR(39)+',NOMBRE ))) )-2) ),
  5. GB.RFCH,
  6. GB.TRACVE,
  7. PRD.PRGSUB,
  8. PRD.UNIRES,
  9. PRD.PARTID,
  10. PRD.CODIGO,
  11. PRD.HORAS,
  12. PRD.NUMPTO,
  13. (TRAIMP),
  14. TRATIP,
  15. replace(GB.TRADAT ,0 ,'') as DATITO,
  16. GB.CENRES    
  17. FROM '+@GBL+' GB INNER JOIN '+@AÑOQUIN+' PRD ON GB.RFCH = PRD.RFCH
  18. WHERE  GB.QNAPROC ='+@QUINCENA+'
  19. AND GB.IDDESNOM >=11 AND GB.IDDESNOM <= 13'
  20. EXEC sp_executesql @QUERY
  #13 (permalink)  
Antiguo 03/01/2014, 10:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

prueba con esto:

Código SQL:
Ver original
  1. SET @QUERY = 'SELECT
  2. SUBSTRING(nombre,0, CHARINDEX('+CHAR(39)+ CHAR(44)+CHAR(39)+',nombre)),
  3. SUBSTRING(NOMBRE ,CHARINDEX('+CHAR(39)+CHAR(47)+CHAR(39)+',NOMBRE )+1,LEN(nombre)),
  4. SUBSTRING(nombre,CHARINDEX(' +CHAR(39)+CHAR(44)+CHAR(39)+',nombre)+1,((LEN(NOMBRE))-(LEN(SUBSTRING(NOMBRE ,CHARINDEX('+CHAR(39)+CHAR(47)+CHAR(39)+', NOMBRE)+1,LEN(NOMBRE))))-(LEN(SUBSTRING(NOMBRE ,0, CHARINDEX('+CHAR(39)+CHAR(44)+CHAR(39)+',NOMBRE ))) )-2) ),
  5. GB.RFCH,
  6. GB.TRACVE,
  7. PRD.PRGSUB,
  8. PRD.UNIRES,
  9. PRD.PARTID,
  10. PRD.CODIGO,
  11. PRD.HORAS,
  12. PRD.NUMPTO,
  13. (TRAIMP),
  14. TRATIP,
  15. replace(GB.TRADAT ,0 ,'''') as DATITO,
  16. GB.CENRES    
  17. FROM '+@GBL+' GB INNER JOIN '+@AÑOQUIN+' PRD ON GB.RFCH = PRD.RFCH
  18. WHERE  GB.QNAPROC ='+@QUINCENA+'
  19. AND GB.IDDESNOM >=11 AND GB.IDDESNOM <= 13'

Como recomendacion al usar queries dinamicos recuerda que las sentencias que llevan ' se sustituyen por '' para que te aparezca la ' dentro de tu cadena si no lo haces lo tomara como un escape de cadean ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 06/01/2014, 14:27
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 11 años
Puntos: 5
Respuesta: Procedimiento almacenado que reciba como parámetros el nombre de la tabla

Listo Sr. Libras muchas gracias por su ayuda lo he resuelto de la siguiente manera.

Código SQL:
Ver original
  1. SET @QUERY = 'SELECT
  2. SUBSTRING(nombre,0, CHARINDEX('+CHAR(39)+ CHAR(44)+CHAR(39)+',nombre)),
  3. SUBSTRING(NOMBRE ,CHARINDEX('+CHAR(39)+CHAR(47)+CHAR(39)+',NOMBRE )+1,LEN(nombre)),
  4. SUBSTRING(nombre,CHARINDEX(' +CHAR(39)+CHAR(44)+CHAR(39)+',nombre)+1,((LEN(NOMBRE))-(LEN(SUBSTRING(NOMBRE ,CHARINDEX('+CHAR(39)+CHAR(47)+CHAR(39)+', NOMBRE)+1,LEN(NOMBRE))))-(LEN(SUBSTRING(NOMBRE ,0, CHARINDEX('+CHAR(39)+CHAR(44)+CHAR(39)+',NOMBRE ))) )-2) ),
  5. GB.RFCH,
  6. GB.TRACVE,
  7. PRD.PRGSUB,
  8. PRD.UNIRES,
  9. PRD.PARTID,
  10. PRD.CODIGO,
  11. PRD.HORAS,
  12. PRD.NUMPTO,
  13. (TRAIMP),
  14. TRATIP,
  15. replace(GB.TRADAT ,0 ,'+CHAR(39)+CHAR(39)+') as DATITO,
  16. GB.CENRES    
  17. FROM '+@GBL+' GB INNER JOIN '+@AÑOQUIN+' PRD ON GB.RFCH = PRD.RFCH
  18. where PRD.RFCH='+CHAR(39)+@RFC + CHAR(39)+
  19. 'AND GB.QNAPROC ='+@QUINCENA +
  20. 'AND GB.IDDESNOM >=11 AND GB.IDDESNOM <= 13  AND PRD.NOMBRE LIKE '+CHAR(39)+CHAR(37)+@NOMBRE+CHAR(37)+CHAR(39)
  21. EXEC sp_executesql @QUERY

Etiquetas: almacenado, nombre, parametros, procedimiento, select, tabla
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




La zona horaria es GMT -6. Ahora son las 17:29.