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
 

Leer las respuestas

#1 Mauricio
28/01/2009 - 10:39 | Informe spam
Me contesto con algo que encontré en el help (debería haberlo leido
antes :( ).
"De manera predeterminada, los parámetros sólo pueden ocupar el lugar
de expresiones constantes; no se pueden utilizar en lugar de nombres de
tabla, nombres de columna o nombres de otros objetos de base de datos."
Ahora las pregunta son: se puede hacer lo que quiero? Cómo?
Gracias nuevamente.


Mauricio avait écrit le 28/01/2009 :
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 similares