Nombre de tabla como parámetro en un Procedimiento Almacenado (2009-01-28)

28/01/2009 - 10:32 por Mauricio | Informe spam
Hola a todos,
estoy intentando hacer un procedimiento almacenado que pueda ser
usado para distintas tablas, así que uno de los parámetros es el nombre
de la tabla a utilizar. Para eso hice lo siguiente:
CREATE PROCEDURE [dbo].[TreeRecords]
@IdRoot int,
@TableName nvarchar(50),
@FieldName nvarchar(50),
@ParentField nvarchar(50)
AS
SET NOCOUNT ON
CREATE TABLE #Tree(
LevelNumber smallint,
IdRecord int
PRIMARY KEY (LevelNumber, IdRecord)
)
INSERT INTO #Tree(LevelNumber, IdRecord)
SELECT 0, @IdRoot
FROM [@TableName]
WHERE @FieldName = @IdRoot

... sigue

El procedimiento es creado pero al querer ejecutarlo con
EXEC TreeRecords @IdRoot = 4, @TableName = N'MCS_CUSTOMERGROUPS',
@FieldName = N'CUSG_ID', @ParentField = N'CUSG_CUSG_ID' ;
GO
me da el siguiente error: Msg 208, Level 16, State 1, Procedure
TreeRecords, Line 13
Invalid object name '@TableName'.

Podrían orientarme cómo resolver esto?
Muchas gracias desde ya.

Mauricio
Copenhague, Dinamarca

Preguntas similare

Leer las respuestas

#6 Jose Mariano Alvarez
29/01/2009 - 01:15 | Informe spam
Puedes usar un generador de codigo para los CRUD.
My generation es uno gratuito.

Si usas un solo SP, cuando cambias la interfaz o la funcionalidad del mismo
en general debes hacer cambios en todos los lados donde lo invocas..


Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase. Por
favor tratar de indicar la versión de SQL y Service Pack. La inclusión de
(CREATE, INSERTS, etc.) para poder reproducir el problema también ayuda.










"Mauricio" wrote in message
news:
Entendido. Y es cierto que el artículo está muy bien explicado.
Seguiré tu consejo y haré distintos procedimientos almacenados.
Gracias nuevamente.

Carlos Sacristan a formulé ce Miércoles :
Me refiero a que lo único que se obtiene es que la creación del
procedimiento sea más sencillo y, sí, efectivamente sólo tienes un
procedimiento que "mantener". Sin embargo tienes efectos colaterales:
rendimiento, seguridad (muy bien explicados en el artículo que te pasé).

¿Qué es exactamente lo que obtienes teniendo un procedimiento genérico de
ese tipo? ¿En qué consiste ese "mantenimiento" del que hablas? En estos
casos, la ganancia es únicamente respecto del programador de base de
datos, no del servidor, y aunque este tipo de cosas hay que valorarlas
individualmente, en este caso creo que no ganas mucho y en contra tienes
varios aspectos negativos.

Un saludo
-
www.navento.com
Servicios de Localización GPS


"Mauricio" wrote:

Gracias por la respuesta, Carlos.
Me gustaría, si tienes tiempo, que me des tu opinión de por qué no
ganaría nada haciendo este tipo de cosas (se me ocurre que sería más
sencillo el mantenimiento de solo 1 procedimiento almacenado en lugar de
varios).
Mientras tanto, leeré el artículo que me has pasado.
Nuevamente gracias.





Mauricio
Copenhague, Dinamarca


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida