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

Crear Tabla con nombre dinamico

Estas en el tema de Crear Tabla con nombre dinamico en el foro de SQL Server en Foros del Web. Hola! tengo que crear un SP que genere tablas temporales donde se separe una tabla de productos por color, el problema es que me pide ...
  #1 (permalink)  
Antiguo 08/10/2012, 16:40
 
Fecha de Ingreso: septiembre-2012
Ubicación: Ituzaingo
Mensajes: 45
Antigüedad: 11 años, 6 meses
Puntos: 0
Crear Tabla con nombre dinamico

Hola! tengo que crear un SP que genere tablas temporales donde se separe una tabla de productos por color, el problema es que me pide que el nombre de la tabla se llame Product_Black si el color es Black, Product_Silver si es Silver , etc y si se creara un nuevo color deberia podes dividirse dinamicamente con ese color,
mi pregunta es como concateno una variable @Color con el nombre de la tabla...
Desde ya muchas gracias..
saludos,Mery
__________________
La vida es un asco, disfrutala....
  #2 (permalink)  
Antiguo 09/10/2012, 07:21
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Crear Tabla con nombre dinamico

En este caso debes utilizar SQL dinámico, por ejemplo:
Código SQL:
Ver original
  1. DECLARE @Tbl Sysname,
  2.             @SQL VARCHAR(MAX);
  3. SET       @Tbl='Product_Silver';
  4. SET       @SQL='Create Table '+@Tbl+' (ID Int, Detalles Varchar(100));'
  5. Print     @SQL;
  6. EXEC(@SQL);
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 09/10/2012, 19:08
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: Crear Tabla con nombre dinamico

Como ya lo hemos comentado (hasta el cansancio) en otros post, cambia el EXEC (CADENA), por el EXEC SP_EXECUTESQL @MyNvarchar
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 10/10/2012, 02:58
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Crear Tabla con nombre dinamico

iislas- concuerdo contigo que SP_ExecuteSQL tiene capacidades y ventajas que no existen en Exec.

Sin embargo- me parece que en este caso no podemos aprovechar estas ventajas, y el rendimiento sera lo mismo con ambos procedimientos.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 10/10/2012, 10:49
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: Crear Tabla con nombre dinamico

¿Para que ir dejando BASURA, si en versiones posteriores no funcionara el EXEC (cadena)?

¿Porque no hacer las cosas desde un inicio?

Me sorprende ver compañeros trabajando con 2005 y aun querer utilizar DUMP, aun mas, me sorprende tu explicacion.

Saludos
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 10/10/2012, 12:09
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Crear Tabla con nombre dinamico

Quiero darte las gracias desde el fondo de mi corazón por tus comentarios amables y profesionales.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #7 (permalink)  
Antiguo 10/10/2012, 15:35
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: Crear Tabla con nombre dinamico

Yo te suplicaria que dieras comentarios un poco mas actualizados, ya estamos en la version 2012....

Y te mando saludos, desde lo mas profundo de mi corazon

FYI

Comparison SP_EXECUTESQL vs EXECUTE/EXEC

http://blog.sqlauthority.com/2007/07...s-executeexec/
__________________
MCTS Isaias Islas

Última edición por iislas; 10/10/2012 a las 15:41
  #8 (permalink)  
Antiguo 11/10/2012, 06:19
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Crear Tabla con nombre dinamico

iislas-

1. No he encontrado en ningún lugar que el Exec(cadena) desaparezca en el futuro, incluso la documentación de 2012:

2. Del poco que yo se acerca de este tema- podemos aprovechar de las capacidades del SP_ExecuteSQL cuando lo utilizamos en la siguiente manera:
sp_executesql @stmt='...',
@params=N'@param1 ..',
@param1=..;
En el caso de este hilo es imposible.

3. No se si la palabra "BASURA" refiere a mi o a Gimenez, pero no se refiere asi a las preguntas o a las respuestas de los demas.
(Perdoname por mi ignorancia, no se que significa DUMP en Castellano o en Inglés, pero supongo que no es una cosa buena)
Como ya has dicho a mi "many words little gain".
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #9 (permalink)  
Antiguo 11/10/2012, 12:15
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: Crear Tabla con nombre dinamico

Este sera mi ultimo comentario sobre el tema:

DUMP es la instruccion en 6.5 y 7.0 para hacer respaldos

A partir del 2000, cambio por BACKUP y aunque (tal vez), siga funcionando en 2012, en lo personal NO LA RECOMENDARIA, en su lugar ofreceria BACKUP.

¿Leiste la liga que te mande?, claramente dice:

Use SP_EXECUTESQL rather than EXEC(), it has better performance and improved security.
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 12/10/2012, 01:23
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
De acuerdo Respuesta: Crear Tabla con nombre dinamico

No te preocupes- esta respuesta es tambien definitivamente la ultima mia!

Lo que Pinal ha escrito en su entrada

refiere a la ejecución de SP_ExecuteSQL en la siguiente manera:
Código SQL:
Ver original
  1. EXEC SP_ExecuteSQL @stmt=N'Select * From sys.objects Where schema_id=@Schema_id',
  2.                     @params=N'@Schema_id Int',
  3.                     @Schema_id=4;
Así el rendimiento mejora porque el sistema no va a crear un nuevo plan de ejecución si lo ejecutas otra vez con otro valor (@Schema_id=1) y va a utilizar el plan almacenado en el Cache.

Si la ejecutas así
Código SQL:
Ver original
  1. EXEC SP_ExecuteSQL @stmt=N'Select * From sys.objects Where schema_id=4';
el sistema va a crear un nuevo plan para cada valor, lo mismo como con Exec(...).
La segunda ventaja es la seguridad: cuando utilizamos SP_ExecuteSQL con @params - evitamos el peligro de SQL Injection.

Lamentablemente- en el caso de crear tablas dinamicamente no podemos aprovechar estas ventajas porque no podemos utilizar el @params.
Como "regla de pulgar" - tienes razón,
aunque en el caso de crear tablas - se puede utilizar ambos.

Muchas gracias por tu paciencia y cortesía.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #11 (permalink)  
Antiguo 13/10/2012, 13:55
 
Fecha de Ingreso: septiembre-2012
Ubicación: Ituzaingo
Mensajes: 45
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Crear Tabla con nombre dinamico

gracias por marearme mas de lo que estaba... jaja... hablando en serio
Gracias GeriReshef por contestarme como siempre, y gracias iislas a vos tambien
Encontre una manera utilizando cursores para resolver mi problema. Saludos, Mery
__________________
La vida es un asco, disfrutala....

Etiquetas: dinamico, nombre, 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

SíEste tema le ha gustado a 1 personas




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