Procedimiento que devuelve tabla

07/05/2008 - 13:02 por Alhambra Eidos Kiquenet | Informe spam
Hola a todos,
siguiendo con el tema del procedimiento,
tengo este script sql para crear una serie de tablas y un procedimiento que
devuelve el resultado de una select, y dicho resultset lo inserto en una
tabla temporal.

Sin embargo, al hacer la select sobre la tabla temporal, no obtengo registros.

Alguien puede orientarme sobre ello ? Gracias.

Aquí dejo el script que voy ejecutando en el Analizado de Consultas.


create table TABLA_MAESTRA (
CD_NOMBRE_TABLA VARCHAR(100) NOT NULL
, DS_CAMPO_DESCRIPCION VARCHAR(100) NOT NULL
, DS_CAMPO_CIF VARCHAR(100) NULL
)
go

CREATE TABLE tabla1(
ID INT NOT NULL,
Descripcion VARCHAR(20) NOT NULL,
CIF VARCHAR(8) NULL
)
GO
CREATE TABLE tabla2(
ID INT NOT NULL,
Descripcion2 VARCHAR(20) NOT NULL
)
GO

INSERT INTO [testdb].[dbo].[TABLA_MAESTRA]
([CD_NOMBRE_TABLA],[DS_CAMPO_DESCRIPCION],[DS_CAMPO_CIF])
VALUES
('tabla1', 'Descripcion', 'CIF')

INSERT INTO [testdb].[dbo].[TABLA_MAESTRA]
([CD_NOMBRE_TABLA],[DS_CAMPO_DESCRIPCION],[DS_CAMPO_CIF])
VALUES
('tabla2', 'Descripcion2', null)
GO

INSERT INTO tabla1 (ID, Descripcion, CIF) VALUES (1, 'des1 a', '12345678');
INSERT INTO tabla1 (ID, Descripcion, CIF) VALUES (2, 'des1 b', '20939483');

INSERT INTO [tabla2] ([ID],[Descripcion2]) VALUES ( 1, 'des2 a' )
INSERT INTO [tabla2] ([ID],[Descripcion2]) VALUES ( 2, 'des2 b' )
INSERT INTO [tabla2] ([ID],[Descripcion2]) VALUES ( 3, 'des2 c' )
GO
DROP PROCEDURE ObtenerTablaPorNombre
GO
CREATE PROCEDURE ObtenerTablaPorNombre
@ParamNombreTabla VARCHAR(100)
AS
DECLARE @cmd nvarchar(max)
DECLARE @params nvarchar(max)
DECLARE @NombreTabla VARCHAR(MAX)
DECLARE @Descripcion VARCHAR(MAX)
DECLARE @CIF VARCHAR(MAX)

PRINT 'Select en tabla maestra'

SELECT @NombreTabla = [CD_NOMBRE_TABLA], @Descripcion =
[DS_CAMPO_DESCRIPCION] , @CIF = [DS_CAMPO_CIF]
FROM [TABLA_MAESTRA] WHERE [CD_NOMBRE_TABLA] = @ParamNombreTabla

PRINT 'Select en tabla ' + @NombreTabla

SET @cmd = 'SELECT ' + @Descripcion + ',' + @CIF + ' FROM ' + @NombreTabla
SET @params = '@pDescripcion varchar, @pCIF varchar, @pNombreTabla varchar '
EXEC sp_executesql @cmd, @params, @pDescripcion = @Descripcion, @pCIF =
@CIF, @pNombreTabla = @NombreTabla

GO
EXEC [ObtenerTablaPorNombre]
@ParamNombreTabla = 'tabla2'
GO
DROP TABLE [#tablaTemp]
Create table #tablaTemp(Descripcion VARCHAR(20), CIF VARCHAR(8) )

Insert into #tablaTemp EXEC [ObtenerTablaPorNombre]
@ParamNombreTabla = 'tabla2'
GO
SELECT * FROM [#tablaTemp]

Saludos y muchas gracias de antemano.
http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft

Preguntas similare

Leer las respuestas

#1 Jorge Gallego
30/05/2008 - 17:29 | Informe spam
Hola!

Prueba con el siguiente procedimiento almacenado, había algún error:

CREATE PROCEDURE ObtenerTablaPorNombre
@ParamNombreTabla VARCHAR(100)
AS
DECLARE @cmd nvarchar(max)
DECLARE @params nvarchar(max)
DECLARE @NombreTabla VARCHAR(MAX)
DECLARE @Descripcion VARCHAR(MAX)
DECLARE @CIF VARCHAR(MAX)
SELECT @NombreTabla = [CD_NOMBRE_TABLA], @Descripcion =
[DS_CAMPO_DESCRIPCION] , @CIF = [DS_CAMPO_CIF]
FROM [TABLA_MAESTRA]
WHERE [CD_NOMBRE_TABLA] = ''+@ParamNombreTabla+''
IF @CIF IS NOT NULL
BEGIN
SET @cmd = 'SELECT ' + @Descripcion + ',' + @CIF + ' FROM ' + @NombreTabla
SET @params = '@pDescripcion varchar, @pCIF varchar , @pNombreTabla
varchar'
EXEC sp_executesql @cmd, @params, @pDescripcion = @Descripcion, @pCIF =
@CIF, @pNombreTabla = @NombreTabla
END
ELSE
BEGIN
SET @cmd = 'SELECT ' + @Descripcion + ', NULL AS CIF FROM ' + @NombreTabla
SET @params = '@pDescripcion varchar, @pNombreTabla varchar'
EXEC sp_executesql @cmd, @params, @pDescripcion = @Descripcion,
@pNombreTabla = @NombreTabla
END
GO

Saludos

Jorge

"Alhambra Eidos Kiquenet"
wrote in message news:
Hola a todos,
siguiendo con el tema del procedimiento,
tengo este script sql para crear una serie de tablas y un procedimiento
que
devuelve el resultado de una select, y dicho resultset lo inserto en una
tabla temporal.

Sin embargo, al hacer la select sobre la tabla temporal, no obtengo
registros.

Alguien puede orientarme sobre ello ? Gracias.

Aquí dejo el script que voy ejecutando en el Analizado de Consultas.


create table TABLA_MAESTRA (
CD_NOMBRE_TABLA VARCHAR(100) NOT NULL
, DS_CAMPO_DESCRIPCION VARCHAR(100) NOT NULL
, DS_CAMPO_CIF VARCHAR(100) NULL
)
go

CREATE TABLE tabla1(
ID INT NOT NULL,
Descripcion VARCHAR(20) NOT NULL,
CIF VARCHAR(8) NULL
)
GO
CREATE TABLE tabla2(
ID INT NOT NULL,
Descripcion2 VARCHAR(20) NOT NULL
)
GO

INSERT INTO [testdb].[dbo].[TABLA_MAESTRA]
([CD_NOMBRE_TABLA],[DS_CAMPO_DESCRIPCION],[DS_CAMPO_CIF])
VALUES
('tabla1', 'Descripcion', 'CIF')

INSERT INTO [testdb].[dbo].[TABLA_MAESTRA]
([CD_NOMBRE_TABLA],[DS_CAMPO_DESCRIPCION],[DS_CAMPO_CIF])
VALUES
('tabla2', 'Descripcion2', null)
GO

INSERT INTO tabla1 (ID, Descripcion, CIF) VALUES (1, 'des1 a',
'12345678');
INSERT INTO tabla1 (ID, Descripcion, CIF) VALUES (2, 'des1 b',
'20939483');

INSERT INTO [tabla2] ([ID],[Descripcion2]) VALUES ( 1, 'des2 a' )
INSERT INTO [tabla2] ([ID],[Descripcion2]) VALUES ( 2, 'des2 b' )
INSERT INTO [tabla2] ([ID],[Descripcion2]) VALUES ( 3, 'des2 c' )
GO
DROP PROCEDURE ObtenerTablaPorNombre
GO
CREATE PROCEDURE ObtenerTablaPorNombre
@ParamNombreTabla VARCHAR(100)
AS
DECLARE @cmd nvarchar(max)
DECLARE @params nvarchar(max)
DECLARE @NombreTabla VARCHAR(MAX)
DECLARE @Descripcion VARCHAR(MAX)
DECLARE @CIF VARCHAR(MAX)

PRINT 'Select en tabla maestra'

SELECT @NombreTabla = [CD_NOMBRE_TABLA], @Descripcion > [DS_CAMPO_DESCRIPCION] , @CIF = [DS_CAMPO_CIF]
FROM [TABLA_MAESTRA] WHERE [CD_NOMBRE_TABLA] = @ParamNombreTabla

PRINT 'Select en tabla ' + @NombreTabla

SET @cmd = 'SELECT ' + @Descripcion + ',' + @CIF + ' FROM ' + @NombreTabla
SET @params = '@pDescripcion varchar, @pCIF varchar, @pNombreTabla varchar
'
EXEC sp_executesql @cmd, @params, @pDescripcion = @Descripcion, @pCIF > @CIF, @pNombreTabla = @NombreTabla

GO
EXEC [ObtenerTablaPorNombre]
@ParamNombreTabla = 'tabla2'
GO
DROP TABLE [#tablaTemp]
Create table #tablaTemp(Descripcion VARCHAR(20), CIF VARCHAR(8) )

Insert into #tablaTemp EXEC [ObtenerTablaPorNombre]
@ParamNombreTabla = 'tabla2'
GO
SELECT * FROM [#tablaTemp]

Saludos y muchas gracias de antemano.
http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft

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