Principales respuestas
Stored procedure usar nombre de tabla por medio de parametro

Pregunta
-
hola.
he intentado crear un stored procedure con un simple select donde la tabla sea un parametro pero me ecuentro con un error el cual dice que @Tabla no esta definido .
CREATE PROCEDURE [dbo].[SelectRegistro]
@Tabla as varchar(50)
ASBEGIN
SET NOCOUNT ON;
SELECT * from @Tabla
END
GOes algo aparentemente simple pero no encuentro solucion, lo unico que se me ocurrio fue hacerlo con condicionales pero quiero saber si se puede con parametros como lo mencione anteriormente, aluna idea de como se hacerlo ?, la razon de esto es crear un stored procedure dinamico donde yo le pase todos parametros, porque al paso que voy voy a tener que crear mil stored procedures .
alguien me puede iluminar.
muchas gracias.
jueves, 29 de marzo de 2012 16:09
Respuestas
-
¿Y qué ventaja tendría entonces tener un procedimiento así? Tiene más sentido construir la instrucción desde la aplicación cliente en vez de tener un único procedimiento al que le pasas como parámetro la instrucción a ejecutar
Además de otros aspectos, una de las principales ventajas que tienen los procedimientos almacenados es la encapsulación. Es decir, que son un envoltorio para ejecutar procesos concretos: consultar una tabla en base a unos criterios de filtrado, actualizar datos de una para pasarlos a otra, etc. etc. Eso puede suponer tener un par de procedimientos o cientos de ellos, pero el hecho de tener que crear muchos no debería ser razón por la cual plantearte crear uno tan genérico que fuera capaz de todo
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator jueves, 5 de abril de 2012 16:06
jueves, 29 de marzo de 2012 16:24 -
Bueno, no he buscado mucho en la red pero esto puede ser un punto de comienzo
http://www.mssqltips.com/sqlservertutorial/160/sql-server-stored-procedure/
Piensa en los procedimientos almacenados como en las funciones, han de tener una misión, generalmente la de encapsular logica de negocio. Por ejemplo si tienes que hacer un proceso de facturación en el que cada nota de entrega has de convertirlo en una factura en función de algún tipo de lógica de negocio, agrupando albaranes etc. El tema es que si eso lo haces dede la aplicación cliente, implica devolver por red todos las notas de entrega y generar muchas instrucciones SQL para generar las facturas. En este caso un procedimiento almacenado serviría para evitar viajes al servidor y para hacer el proceso más rápido. Además de eso la primera vez que lo ejecutes se generará un plan de ejecución (imagina una compilación de un programa) que será vuelto a usar tantas veces lo llames despues.
Hay muchos más escenarios pero los iras aprendiendo con la experiencia.
Comparte lo que sepas, aprende lo que no sepas (FGG)
portalSQL
El rincón del DBA- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator jueves, 5 de abril de 2012 16:07
jueves, 29 de marzo de 2012 19:54Moderador
Todas las respuestas
-
¿Y qué ventaja tendría entonces tener un procedimiento así? Tiene más sentido construir la instrucción desde la aplicación cliente en vez de tener un único procedimiento al que le pasas como parámetro la instrucción a ejecutar
Además de otros aspectos, una de las principales ventajas que tienen los procedimientos almacenados es la encapsulación. Es decir, que son un envoltorio para ejecutar procesos concretos: consultar una tabla en base a unos criterios de filtrado, actualizar datos de una para pasarlos a otra, etc. etc. Eso puede suponer tener un par de procedimientos o cientos de ellos, pero el hecho de tener que crear muchos no debería ser razón por la cual plantearte crear uno tan genérico que fuera capaz de todo
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator jueves, 5 de abril de 2012 16:06
jueves, 29 de marzo de 2012 16:24 -
Hola,
Vea un ejemplo.
-- Table create table teste10 ( id int primary key, nome varchar(30) ) go -- Type create type Type_TABLE as table ( id int primary key, nome varchar(30) ) go -- PROC create procedure SP_table_p @parameter_table Type_TABLE readonly as insert into teste10 (id, nome) select id, nome from @parameter_table select id, nome from teste10 go -- Test declare @parameter_table as Type_TABLE; insert into @parameter_table values(1,'JOSE'); exec dbo.SP_table_p @parameter_table go
Saludos,jueves, 29 de marzo de 2012 16:26 -
gracias por responderme,
bueno yo soy nuevo en programacion y me gustaria saber cuando usar o no un stored procedure. yo tengo entendido que un stored procedure se hace para poder reutilizarlo, pero veo que mi aplicacion se esta llenando de procediemtos almacenados, tal vez si sea mejor enviar la instruccion desde la aplicacion.
voy a seguir investigando hacerca de este tema ya que no cuento el conocimiento suficiente como para saber cuando o no crear procedimeinto.
muchas gracias.
jueves, 29 de marzo de 2012 16:51 -
El uso de procedimientos almacenados en mi opinión se vincula a un tema de diseño y de estrategias contempladas para el manejo de operaciones CRUD(Create,Read,Update,Delete) así como temas de seguridad, inclusive como manejaras la gestión de la lógica de negocios en tu capa de datos.
En principio te puedo mencionar que en efecto si son reutilizables y tienen una amplia cantidad de beneficios, pero tampoco tiene razón de ser por ejemplo que uses SP para tareas que perfectamente puedes realizar con vistas o funciones definidas por el usuario.
Tener muchos procedimientos almacenados no es problema, es un proceso natural que depende de tu diseño y sobre todo de la amplitud de tu sistema, así que en principio eso no te deberia de representar problema. Encontraras tambien opiniones en contra y a favor de su uso, te recomendaria leer un poco más sobre su uso para que vayas identificando por tu cuenta los escenarios que suelen ser mas propicios para su uso.
Cualquier duda al respecto no dudes en consultarlo o escribirnos.
"How many years can some people exist before they're allowed to be free" Bob Dylan Email: info@geohernandez.com Blog: geeks.ms/blogs/ghernandez
jueves, 29 de marzo de 2012 17:05 -
muchas gracias por tu respuesta geovany , pues tomare tu consejo y seguire investigando .
por ultimo si tienen algun buen link con fuentes de informacion sobre el tema seria aun mejor, yo ya estoy leyendo varios.
gracias.
jueves, 29 de marzo de 2012 19:31 -
Bueno, no he buscado mucho en la red pero esto puede ser un punto de comienzo
http://www.mssqltips.com/sqlservertutorial/160/sql-server-stored-procedure/
Piensa en los procedimientos almacenados como en las funciones, han de tener una misión, generalmente la de encapsular logica de negocio. Por ejemplo si tienes que hacer un proceso de facturación en el que cada nota de entrega has de convertirlo en una factura en función de algún tipo de lógica de negocio, agrupando albaranes etc. El tema es que si eso lo haces dede la aplicación cliente, implica devolver por red todos las notas de entrega y generar muchas instrucciones SQL para generar las facturas. En este caso un procedimiento almacenado serviría para evitar viajes al servidor y para hacer el proceso más rápido. Además de eso la primera vez que lo ejecutes se generará un plan de ejecución (imagina una compilación de un programa) que será vuelto a usar tantas veces lo llames despues.
Hay muchos más escenarios pero los iras aprendiendo con la experiencia.
Comparte lo que sepas, aprende lo que no sepas (FGG)
portalSQL
El rincón del DBA- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator jueves, 5 de abril de 2012 16:07
jueves, 29 de marzo de 2012 19:54Moderador -
Saludos
Geovanny (... Encontraras tambien opiniones en contra y a favor de su uso...) y Miguel (... El tema es que si eso lo haces dede la aplicación cliente, implica devolver por red todos las notas de entrega y generar muchas instrucciones SQL para generar las facturas. En este caso un procedimiento almacenado serviría para evitar viajes al servidor y para hacer el proceso más rápido. Además de eso la primera vez que lo ejecutes se generará un plan de ejecución (imagina una compilación de un programa) que será vuelto a usar tantas veces lo llames después. ...)
Otro factor no menos importante es el tema seguridad. Podrías dar permisos sobre un SP que trabaje con varias tablas y no tener sobre cada tabla.
Un cuanto a una fuente de información, utiliza los libros en pantalla.
NOTA:
- Si buscas en internet o preguntas a programadores seguramente te dirán que no son necesarios los procedimientos almacenados o que si los utilizar, tus aplicaciones dejan de ser genéricas y un largo números de peros. Según mi experiencia, la utilización de los métodos propios de la base de datos (sp, views, functions,trigger,types, policies, etc), es la mejor de las opciones.
- Si estas empezando ve directo a sqlserver 2008 R2
enviado por microsoft group
viernes, 30 de marzo de 2012 17:26 -
Lo que quieres hacer no te lo da por que la ejecución de la sentencia no te lo interpreta como texto... Por lo que la solución si te sirve puede ser...
CREATE PROCEDURE TEST
@TABLA VARCHAR(20) = ''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CADENA VARCHAR(2000)
SET @CADENA = 'SELECT * FROM '+@TABLA
EXEC(@CADENA)
END--test
EXEC TEST 'nombre_tabla'
Espero te funcione... Salu2
- Propuesto como respuesta Canikin miércoles, 12 de agosto de 2015 22:06
miércoles, 17 de octubre de 2012 21:45 -
excelente!!!! justo lo que andaba buscando muy buen aporte.miércoles, 12 de agosto de 2015 22:05
-
Excelente, me ayudo a resolver, 100ptsmartes, 21 de febrero de 2023 17:09