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

Concatenar nombre de tabla

Estas en el tema de Concatenar nombre de tabla en el foro de SQL Server en Foros del Web. HOLAS SOY NUEVA EN EST DEL SQL DINAMICO, ENTOCES REALICE UN A PROCEDIMIENTO QUE CONTINE UN CURSOS PERO REQUIERO QUE LOS DATOS SE GUARDEN EN ...
  #1 (permalink)  
Antiguo 13/03/2009, 10:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 5
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta Concatenar nombre de tabla

HOLAS

SOY NUEVA EN EST DEL SQL DINAMICO, ENTOCES REALICE UN A PROCEDIMIENTO QUE CONTINE UN CURSOS PERO REQUIERO QUE LOS DATOS SE GUARDEN EN TABLAS CON DIFERENTES NOMBRES SEGUN PASEN LOS AÑOS, SI REALIZO LA consulta para el nombre de una tabla en particular no tiene ningun error pero si lo hago para una dinamieca me marca ell siguient error , si me pudieran ayudar se los agredeere toda la vida .

Msg 296, Level 16, State 3, Procedure SpFechasD09, Line 15
The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.
  #2 (permalink)  
Antiguo 13/03/2009, 10:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 5
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Concatenar nombre de tabla

lter PROCEDURE [dbo].[SpFechasD09](@tabla AS VARCHAR(15),@cp AS varchar(15),@fecini AS VARCHAR(30),@fecfin AS VARCHAR(30))
AS
DECLARE @sql VARCHAR(1000),@botip INT,@bofecd VARCHAR(30),@ingresos INT,@pt INT,@botib1 INT,@fecha AS VARCHAR(30)
DECLARE @Taquilla INT, @Abordo INT,@pastra INT,@Total INT,@TPT INT
DECLARE @VAR1 int,@VAR2 int, @VAR3 int, @VAR4 int,@CentroPago int ,@Marca Varchar(30)
declare @fecha1 smalldatetime,@anio varchar(30),@an nvarchar(10)
declare @tablename sysname
DECLARE @cadena VARCHAR(1000)
select @fecha1=GETDATE()
select @anio=year(@fecha1)
select @an=substring(cast(@anio as varchar(10)),3,2)
SELECT @tablename='tblFechasD'+@an
SELECT @sql='DECLARE cursorsito CURSOR FOR SELECT BOTIPB, BOFECD, SUM(BOIMPB) AS INGRESOS, Count(*) as PT, BOTIPB FROM ' + @tabla + ' WHERE ID_CENTRO_PAGO = '+ @cp +' and BOFECD >= '''+ @fecini + ''' and BOFECD <= ''' + @fecfin + ''' GROUP by BOFECD, BOTIPB order by BOFECD'
exec(@sql)
open cursorsito
FETCH NEXT FROM cursorsito INTO @botip,@bofecd,@ingresos,@pt,@botib1
if @@FETCH_STATUS=0
BEGIN
SELECT @fecha=@bofecd
SELECT @cp
Select Marca='Null'
select @Taquilla=0
Select @Abordo=0
Select @pastra=0
WHILE @@FETCH_STATUS=0
BEGIN
IF @fecha=@bofecd

BEGIN
IF @botip=01 or @botip=11 or @botip=21 or @botip=31 or @botip=41 or @botip=61
BEGIN
SELECT @Taquilla=@Taquilla + @ingresos
END
ELSE
BEGIN
SELECT @Abordo=@Abordo + @ingresos
END
SELECT @Total = @Taquilla + @Abordo
SELECT @pastra=@pastra + @pt
FETCH NEXT FROM cursorsito INTO @botip,@bofecd,@ingresos,@pt,@botib1
END
ELSE
BEGIN
Select @TPT = @pastra
SELECT @CentroPago=cast(@cp as int), @VAR1=@TPT,@VAR2=@Taquilla,@VAR3=@Abordo,@VAR4=@To tal
SELECT @cadena = 'INSERT INTO '+ rtrim(ltrim(@tablename)) +' values ('+ rtrim(ltrim(@centroPago))+ ',' + rtrim(ltrim(@Marca)) + ',''' +rtrim(ltrim(@fecha)) + ''',' + rtrim(ltrim(@VAR1)) + ',' + rtrim(ltrim(@VAR2)) + ','+ rtrim(ltrim(@VAR3)) + ',' + rtrim(ltrim(@VAR4)) + ')'
EXECUTE (@cadena)
SELECT @Taquilla=0
SELECT @Abordo=0
SELECT @pastra=0
SELECT @fecha=@bofecd
SELECT @cp
Select Marca='Null'
END
END
Select @TPT = @pastra
SELECT @CentroPago=cast(@cp as int), @VAR1=@TPT,@VAR2=@Taquilla,@VAR3=@Abordo,@VAR4=@To tal
SELECT @cadena = 'INSERT INTO '+ rtrim(ltrim(@tablename)) +' values ('+ rtrim(ltrim(@CentroPago))+ ',' + rtrim(ltrim(@Marca)) + ',''' +rtrim(ltrim(@fecha)) + ''',' + rtrim(ltrim(@VAR1)) + ',' + rtrim(ltrim(@VAR2)) + ','+ rtrim(ltrim(@VAR3)) + ',' + rtrim(ltrim(@VAR4)) + ')'
EXECUTE (@cadena)
END
CLOSE cursorsito
deallocate cursorsito
  #3 (permalink)  
Antiguo 13/03/2009, 13:02
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: Concatenar nombre de tabla

Tere

Creo que el errror es muy claro, estas intentando convertir una cadena de caracteres en una fecha que sale fuera del rango.
  #4 (permalink)  
Antiguo 13/03/2009, 14:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 5
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Concatenar nombre de tabla

SI TE REFIERES AL MSG ya se que eso dice, pero ya lo cheque el codigo y aparentemente todo esta bien

de echo lo cabie por el que incluyo a continuacion

ALTER PROCEDURE [dbo].[SpFechasD09](@tabla AS VARCHAR(15),@cp AS varchar(15),@fecini AS VARCHAR(30),@fecfin AS VARCHAR(30))
AS
DECLARE @sql VARCHAR(1000),@botip INT,@bofecd smalldatetime ,@ingresos INT,@pt INT,@botib1 INT,@fecha smalldatetime
DECLARE @Taquilla INT, @Abordo INT,@pastra INT,@Total INT,@TPT INT
DECLARE @VAR1 int,@VAR2 int, @VAR3 int, @VAR4 int,@CentroPago int ,@Marca Varchar(30)
declare @fecha1 smalldatetime,@anio varchar(30),@an varchar(30)
declare @tablename sysname
DECLARE @cadena nvarchar(1000)
select @fecha1=GETDATE()
select @anio=year(cast(@fecha1 as varchar(30)))
select @an=substring(@anio,3,2)
SET @tablename='tblFechasD'+@an

SELECT @sql='DECLARE cursorsito CURSOR FOR SELECT BOTIPB, BOFECD, SUM(BOIMPB) AS INGRESOS, Count(*) as PT FROM ' + @tabla + ' WHERE ID_CENTRO_PAGO = '+ @cp +' and BOFECD >= '''+ @fecini + ''' and BOFECD <= ''' + @fecfin + ''' GROUP by BOFECD, BOTIPB order by BOFECD'
exec(@sql)
open cursorsito
FETCH NEXT FROM cursorsito INTO @botip,@bofecd,@ingresos,@pt
if @@FETCH_STATUS=0
BEGIN
SELECT @fecha=@bofecd
SELECT @cp
Select Marca='Null'
select @Taquilla=0
Select @Abordo=0
Select @pastra=0
WHILE @@FETCH_STATUS=0
BEGIN
IF @fecha=@bofecd

BEGIN
IF @botip=01 or @botip=11 or @botip=21 or @botip=31 or @botip=41 or @botip=61
BEGIN
SELECT @Taquilla=@Taquilla + @ingresos
END
ELSE
BEGIN
SELECT @Abordo=@Abordo + @ingresos
END
SELECT @Total = @Taquilla + @Abordo
SELECT @pastra=@pastra + @pt
FETCH NEXT FROM cursorsito INTO @botip,@bofecd,@ingresos,@pt
END
ELSE
BEGIN
Select @TPT = @pastra
SELECT @VAR1=@TPT,@VAR2=@Taquilla,@VAR3=@Abordo,@VAR4=@To tal
SElect @cadena = 'INSERT INTO '+ @tablename +'(CentroPago,Marca,fecha,var1,var2,var3,var4) values ('''+ @cp+''',''' +@Marca + ''',''' + convert(varchar(30),@fecha) + ''',' + Convert(varchar(50),@VAR1) + ',' + Convert(varchar(50), @VAR2) + ','+ Convert(varchar(50), @VAR3) + ',' + Convert(varchar(50), @VAR4) + ')'
EXECUTE sp_executesql @cadena
SELECT @Taquilla=0
SELECT @Abordo=0
SELECT @pastra=0
SELECT @fecha=@bofecd
SELECT @cp
Select Marca='Null'
END
END
Select @TPT = @pastra
SELECT @VAR1=@TPT,@VAR2=@Taquilla,@VAR3=@Abordo,@VAR4=@To tal
SElect @cadena = 'INSERT INTO '+ @tablename +'(CentroPago,Marca,fecha,var1,var2,var3,var4) values ('''+ @cp+''',''' +@Marca + ''',''' + convert(varchar(30),@fecha) + ''',' + Convert(varchar(50),@VAR1) + ',' + Convert(varchar(50), @VAR2) + ','+ Convert(varchar(50), @VAR3) + ',' + Convert(varchar(50), @VAR4) + ')'
EXECUTE sp_executesql @cadena
END
CLOSE cursorsito
deallocate cursorsito
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




La zona horaria es GMT -6. Ahora son las 11:35.