comprobar existencia de un objeto tabla

21/05/2008 - 19:56 por Luis Mata | Informe spam
por que esto aveces funciona aveces no

if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1

BEGIN

drop table dtabla

END

hago el select solo y da 1 pero ejecuta el procedimiento y no borra la
tabla.

pero correo esas lineas manualmente y si funciona



Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613

Preguntas similare

Leer las respuestas

#6 Luis Mata
21/05/2008 - 23:30 | Informe spam
este resultado me sale 1
select count(*) from sysobjects where xtype = 'U' and name = 'dtabla'
que segun el procedimiento deberia de eliminarlo para volver a crearlo con
if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1
BEGIN
drop table dtabla
END

menciono tambien que si el procedimiento lo dejan correr termina sin
problema, el problema es cuando el usuario usa ctrl+alt+supr y corta la
finalizacion del procedure.
pero lo mencionado anteriormente si arroja 1 y deberia de eliminarlo pero no
lo hace
hago select a la tabla dtabla y esta ahi con datos y todo.
selecciono del procedure solamente:
if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1
BEGIN
drop table dtabla
END
lo ejecuto y se elimina
pero al ejecutar el procedure sin correr estas lineas manualmente sale el
error mencionado anteriormente
despues todo corre normal
algo tendra que ver el CTRL-ALT-SUPR
`
definitivamente no borra el objeto DTABLA

ni con

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL

BEGIN

drop table dtabla

END



Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Luis Mata" escribió en el mensaje
news:
Aqui les paso el procedure, ya no me sale el error cuando borro la tabla
dtabla pero como se ve esta antes de la linea 13

ALTER procedure [dbo].[ventas_tiendas_all] @alm char(2), @mes1 char(10),
@mes2 CHAR(10), @modo int,@prov char(6)
as
if (select count(*) from sysobjects where xtype = 'U' and name =
'dtabla')=1
BEGIN
drop table dtabla
END
DECLARE @CAMPO varCHAR(6),@ejecuta varchar(150),@nbd varchar(6)
declare @vcodigo char(13),@vcantidad decimal(12,2),@ejecxbd
varchar(200),@ejecxtie varchar(250)
create table dtabla(proveedor char(6),codigo char(13),descripcion
varchar(150),guia int, costo decimal(12,4),publico decimal(12,4),
vtatotal decimal(12,2))
if @prov=''
begin
insert into dtabla select cod3provee,codarticul,descripcio,0 as
guia,costo3,precvendol,0 as total
from bdcho.dbo.invmatpr where coidtalm = '10'
end
else
begin
insert into dtabla select cod3provee,codarticul,descripcio,0 as
guia,costo3,precvendol,0 as total
from bdcho.dbo.invmatpr where coidtalm = '10' and cod3provee=@prov
end
declare bdatos cursor for select nombre from maestro.dbo.openbd where
based !=9
open bdatos
fetch next from bdatos into @nbd
while @@fetch_status = 0
begin
set @campo = @nbd
set @ejecuta = 'alter table dtabla add '+@campo+' decimal(12,2) default 0
not null'
exec (@ejecuta)
if @prov=''
begin
set @ejecxtie = 'declare ventas cursor for select
codarticul,sum(cantidad) as cantidad from '+@campo+
'.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
'+''''+@mes2+''''+
' and coidtalm='+''''+@alm+''''+' group by codarticul'
end
else
begin
set @ejecxtie = 'declare ventas cursor for select
codarticul,sum(cantidad) as cantidad from '+@campo+
'.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
'+''''+@mes2+''''+
' and coidtalm='+''''+@alm+''''+' and proveedor='+''''+@prov+''''+'
group by codarticul'
end
exec (@ejecxtie)

open ventas
fetch next from ventas into @vcodigo,@vcantidad
while @@fetch_status = 0
begin
set @ejecxbd = 'update dtabla set guia = 1, '+@campo+' =
'+cast(@vcantidad as varchar(15))+',vtatotal=vtatotal+'+cast(@vcantidad as
varchar(15))+
' where codigo='+''''+@vcodigo+''''
exec (@ejecxbd)
fetch next from ventas into @vcodigo,@vcantidad
end
deallocate ventas
fetch next from bdatos into @nbd
end
deallocate bdatos
alter table dtabla add totalc decimal (12,2) default 0 not null
alter table dtabla add totalp decimal (12,2) default 0 not null
update dtabla set totalc = costo*vtatotal,totalp = publico*vtatotal
if @modo=0
begin
select * from dtabla
end
else
begin
select * from dtabla where guia = 1
end
drop table dtabla


Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Gux (MVP)" escribió en el mensaje
news:
Ayudaría mucho si usted muestra el procedimiento ventas_tiendas_all o por
favor muestre la línea 13, para que no estemos adivinando.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Luis Mata" wrote:

este es el error
Msg 213, Level 16, State 1, Procedure ventas_tiendas_all, Line 13

Insert Error: Column name or number of supplied values does not match
table
definition.

aclaro que el procedimiento primero comprueba la tabla si existe lo
borra
luego lo vuelve a crear, pero apesar que existe no lo borra lo tengo que
borrar manualmente recien ahi funciona

Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Luis Mata" escribió en el mensaje
news:eQ$
> por que esto aveces funciona aveces no
>
> if (select count(*) from sysobjects where xtype = 'U' and name >>> > 'dtabla')=1
>
> BEGIN
>
> drop table dtabla
>
> END
>
> hago el select solo y da 1 pero ejecuta el procedimiento y no borra la
> tabla.
>
> pero correo esas lineas manualmente y si funciona
>
>
>
> Att
> Luis Mata Figueroa
> Área Informática
> Centro Cerámico Las Flores SAC
> RPC: 993597297
> TEL: 6174613
>
>
>









Respuesta Responder a este mensaje
#7 Alejandro Mesa
22/05/2008 - 01:06 | Informe spam
Luis Mata,

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL

BEGIN

drop table dtabla

END



Te dije que uses el esquema al referenciar a la tabla.

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL
drop table DBO.dtabla


No entiendo bien eso de usar ctrl+alt+del. Te refieres a reinicializar la
maquina donde esta instalado SQL Server?


AMB


"Luis Mata" wrote:

este resultado me sale 1
select count(*) from sysobjects where xtype = 'U' and name = 'dtabla'
que segun el procedimiento deberia de eliminarlo para volver a crearlo con
if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1
BEGIN
drop table dtabla
END

menciono tambien que si el procedimiento lo dejan correr termina sin
problema, el problema es cuando el usuario usa ctrl+alt+supr y corta la
finalizacion del procedure.
pero lo mencionado anteriormente si arroja 1 y deberia de eliminarlo pero no
lo hace
hago select a la tabla dtabla y esta ahi con datos y todo.
selecciono del procedure solamente:
if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1
BEGIN
drop table dtabla
END
lo ejecuto y se elimina
pero al ejecutar el procedure sin correr estas lineas manualmente sale el
error mencionado anteriormente
despues todo corre normal
algo tendra que ver el CTRL-ALT-SUPR
`
definitivamente no borra el objeto DTABLA

ni con

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL

BEGIN

drop table dtabla

END



Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Luis Mata" escribió en el mensaje
news:
> Aqui les paso el procedure, ya no me sale el error cuando borro la tabla
> dtabla pero como se ve esta antes de la linea 13
>
> ALTER procedure [dbo].[ventas_tiendas_all] @alm char(2), @mes1 char(10),
> @mes2 CHAR(10), @modo int,@prov char(6)
> as
> if (select count(*) from sysobjects where xtype = 'U' and name =
> 'dtabla')=1
> BEGIN
> drop table dtabla
> END
> DECLARE @CAMPO varCHAR(6),@ejecuta varchar(150),@nbd varchar(6)
> declare @vcodigo char(13),@vcantidad decimal(12,2),@ejecxbd
> varchar(200),@ejecxtie varchar(250)
> create table dtabla(proveedor char(6),codigo char(13),descripcion
> varchar(150),guia int, costo decimal(12,4),publico decimal(12,4),
> vtatotal decimal(12,2))
> if @prov=''
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10'
> end
> else
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10' and cod3provee=@prov
> end
> declare bdatos cursor for select nombre from maestro.dbo.openbd where
> based !=9
> open bdatos
> fetch next from bdatos into @nbd
> while @@fetch_status = 0
> begin
> set @campo = @nbd
> set @ejecuta = 'alter table dtabla add '+@campo+' decimal(12,2) default 0
> not null'
> exec (@ejecuta)
> if @prov=''
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' group by codarticul'
> end
> else
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' and proveedor='+''''+@prov+''''+'
> group by codarticul'
> end
> exec (@ejecxtie)
>
> open ventas
> fetch next from ventas into @vcodigo,@vcantidad
> while @@fetch_status = 0
> begin
> set @ejecxbd = 'update dtabla set guia = 1, '+@campo+' =
> '+cast(@vcantidad as varchar(15))+',vtatotal=vtatotal+'+cast(@vcantidad as
> varchar(15))+
> ' where codigo='+''''+@vcodigo+''''
> exec (@ejecxbd)
> fetch next from ventas into @vcodigo,@vcantidad
> end
> deallocate ventas
> fetch next from bdatos into @nbd
> end
> deallocate bdatos
> alter table dtabla add totalc decimal (12,2) default 0 not null
> alter table dtabla add totalp decimal (12,2) default 0 not null
> update dtabla set totalc = costo*vtatotal,totalp = publico*vtatotal
> if @modo=0
> begin
> select * from dtabla
> end
> else
> begin
> select * from dtabla where guia = 1
> end
> drop table dtabla
>
>
> Att
> Luis Mata Figueroa
> Área Informática
> Centro Cerámico Las Flores SAC
> RPC: 993597297
> TEL: 6174613
>
>
> "Gux (MVP)" escribió en el mensaje
> news:
>> Ayudaría mucho si usted muestra el procedimiento ventas_tiendas_all o por
>> favor muestre la línea 13, para que no estemos adivinando.
>>
>> Gustavo Larriera, Microsoft MVP
>> https://mvp.support.microsoft.com/p...o.larriera
>> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>>
>>
>>
>> "Luis Mata" wrote:
>>
>>> este es el error
>>> Msg 213, Level 16, State 1, Procedure ventas_tiendas_all, Line 13
>>>
>>> Insert Error: Column name or number of supplied values does not match
>>> table
>>> definition.
>>>
>>> aclaro que el procedimiento primero comprueba la tabla si existe lo
>>> borra
>>> luego lo vuelve a crear, pero apesar que existe no lo borra lo tengo que
>>> borrar manualmente recien ahi funciona
>>>
>>> Att
>>> Luis Mata Figueroa
>>> Área Informática
>>> Centro Cerámico Las Flores SAC
>>> RPC: 993597297
>>> TEL: 6174613
>>>
>>>
>>> "Luis Mata" escribió en el mensaje
>>> news:eQ$
>>> > por que esto aveces funciona aveces no
>>> >
>>> > if (select count(*) from sysobjects where xtype = 'U' and name > >>> > 'dtabla')=1
>>> >
>>> > BEGIN
>>> >
>>> > drop table dtabla
>>> >
>>> > END
>>> >
>>> > hago el select solo y da 1 pero ejecuta el procedimiento y no borra la
>>> > tabla.
>>> >
>>> > pero correo esas lineas manualmente y si funciona
>>> >
>>> >
>>> >
>>> > Att
>>> > Luis Mata Figueroa
>>> > Área Informática
>>> > Centro Cerámico Las Flores SAC
>>> > RPC: 993597297
>>> > TEL: 6174613
>>> >
>>> >
>>> >
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#8 Gux (MVP)
22/05/2008 - 16:26 | Informe spam
Estoy algo confundido. Usted dice que si "el procedimiento lo dejan correr
termina sin problema, el problema es cuando el usuario usa ctrl+alt+supr"

Cuál es el sentido que el usuario haga CTRL-ALT-DEL para interrumpir?

Mirado así sin los detalles, es casi como decir "todo funciona bien excepto
cuando cortamos la energía eléctrica". Y no es para menos verdad? :-)

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Luis Mata" wrote:

este resultado me sale 1
select count(*) from sysobjects where xtype = 'U' and name = 'dtabla'
que segun el procedimiento deberia de eliminarlo para volver a crearlo con
if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1
BEGIN
drop table dtabla
END

menciono tambien que si el procedimiento lo dejan correr termina sin
problema, el problema es cuando el usuario usa ctrl+alt+supr y corta la
finalizacion del procedure.
pero lo mencionado anteriormente si arroja 1 y deberia de eliminarlo pero no
lo hace
hago select a la tabla dtabla y esta ahi con datos y todo.
selecciono del procedure solamente:
if (select count(*) from sysobjects where xtype = 'U' and name = 'dtabla')=1
BEGIN
drop table dtabla
END
lo ejecuto y se elimina
pero al ejecutar el procedure sin correr estas lineas manualmente sale el
error mencionado anteriormente
despues todo corre normal
algo tendra que ver el CTRL-ALT-SUPR
`
definitivamente no borra el objeto DTABLA

ni con

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL

BEGIN

drop table dtabla

END



Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Luis Mata" escribió en el mensaje
news:
> Aqui les paso el procedure, ya no me sale el error cuando borro la tabla
> dtabla pero como se ve esta antes de la linea 13
>
> ALTER procedure [dbo].[ventas_tiendas_all] @alm char(2), @mes1 char(10),
> @mes2 CHAR(10), @modo int,@prov char(6)
> as
> if (select count(*) from sysobjects where xtype = 'U' and name =
> 'dtabla')=1
> BEGIN
> drop table dtabla
> END
> DECLARE @CAMPO varCHAR(6),@ejecuta varchar(150),@nbd varchar(6)
> declare @vcodigo char(13),@vcantidad decimal(12,2),@ejecxbd
> varchar(200),@ejecxtie varchar(250)
> create table dtabla(proveedor char(6),codigo char(13),descripcion
> varchar(150),guia int, costo decimal(12,4),publico decimal(12,4),
> vtatotal decimal(12,2))
> if @prov=''
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10'
> end
> else
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10' and cod3provee=@prov
> end
> declare bdatos cursor for select nombre from maestro.dbo.openbd where
> based !=9
> open bdatos
> fetch next from bdatos into @nbd
> while @@fetch_status = 0
> begin
> set @campo = @nbd
> set @ejecuta = 'alter table dtabla add '+@campo+' decimal(12,2) default 0
> not null'
> exec (@ejecuta)
> if @prov=''
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' group by codarticul'
> end
> else
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' and proveedor='+''''+@prov+''''+'
> group by codarticul'
> end
> exec (@ejecxtie)
>
> open ventas
> fetch next from ventas into @vcodigo,@vcantidad
> while @@fetch_status = 0
> begin
> set @ejecxbd = 'update dtabla set guia = 1, '+@campo+' =
> '+cast(@vcantidad as varchar(15))+',vtatotal=vtatotal+'+cast(@vcantidad as
> varchar(15))+
> ' where codigo='+''''+@vcodigo+''''
> exec (@ejecxbd)
> fetch next from ventas into @vcodigo,@vcantidad
> end
> deallocate ventas
> fetch next from bdatos into @nbd
> end
> deallocate bdatos
> alter table dtabla add totalc decimal (12,2) default 0 not null
> alter table dtabla add totalp decimal (12,2) default 0 not null
> update dtabla set totalc = costo*vtatotal,totalp = publico*vtatotal
> if @modo=0
> begin
> select * from dtabla
> end
> else
> begin
> select * from dtabla where guia = 1
> end
> drop table dtabla
>
>
> Att
> Luis Mata Figueroa
> Área Informática
> Centro Cerámico Las Flores SAC
> RPC: 993597297
> TEL: 6174613
>
>
> "Gux (MVP)" escribió en el mensaje
> news:
>> Ayudaría mucho si usted muestra el procedimiento ventas_tiendas_all o por
>> favor muestre la línea 13, para que no estemos adivinando.
>>
>> Gustavo Larriera, Microsoft MVP
>> https://mvp.support.microsoft.com/p...o.larriera
>> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>>
>>
>>
>> "Luis Mata" wrote:
>>
>>> este es el error
>>> Msg 213, Level 16, State 1, Procedure ventas_tiendas_all, Line 13
>>>
>>> Insert Error: Column name or number of supplied values does not match
>>> table
>>> definition.
>>>
>>> aclaro que el procedimiento primero comprueba la tabla si existe lo
>>> borra
>>> luego lo vuelve a crear, pero apesar que existe no lo borra lo tengo que
>>> borrar manualmente recien ahi funciona
>>>
>>> Att
>>> Luis Mata Figueroa
>>> Área Informática
>>> Centro Cerámico Las Flores SAC
>>> RPC: 993597297
>>> TEL: 6174613
>>>
>>>
>>> "Luis Mata" escribió en el mensaje
>>> news:eQ$
>>> > por que esto aveces funciona aveces no
>>> >
>>> > if (select count(*) from sysobjects where xtype = 'U' and name > >>> > 'dtabla')=1
>>> >
>>> > BEGIN
>>> >
>>> > drop table dtabla
>>> >
>>> > END
>>> >
>>> > hago el select solo y da 1 pero ejecuta el procedimiento y no borra la
>>> > tabla.
>>> >
>>> > pero correo esas lineas manualmente y si funciona
>>> >
>>> >
>>> >
>>> > Att
>>> > Luis Mata Figueroa
>>> > Área Informática
>>> > Centro Cerámico Las Flores SAC
>>> > RPC: 993597297
>>> > TEL: 6174613
>>> >
>>> >
>>> >
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#9 Luis Mata
22/05/2008 - 19:28 | Informe spam
el usuario finaliza la tareas de los programas por que se colgo el sistema
o porque el proceso del procedimiento es un poco largo o se equivoco al
elegir opciones del reporte que corre con el procedimento.

ya se le indico al usuario que no finalize asi bruscamente el proceso que es
por eso que ocurre ese error
pero porque no puedo eliminar la tabla existente con los codigos
anteriormente mencionados
al ubicarlo deberia de eliminar la tabla para crearlo no es asi la otra
opcion seria
borrar el contenido de la tabla pero porque no corre lo anterior


Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Gux (MVP)" escribió en el mensaje
news:
Estoy algo confundido. Usted dice que si "el procedimiento lo dejan correr
termina sin problema, el problema es cuando el usuario usa ctrl+alt+supr"

Cuál es el sentido que el usuario haga CTRL-ALT-DEL para interrumpir?

Mirado así sin los detalles, es casi como decir "todo funciona bien
excepto
cuando cortamos la energía eléctrica". Y no es para menos verdad? :-)

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Luis Mata" wrote:

este resultado me sale 1
select count(*) from sysobjects where xtype = 'U' and name = 'dtabla'
que segun el procedimiento deberia de eliminarlo para volver a crearlo
con
if (select count(*) from sysobjects where xtype = 'U' and name =
'dtabla')=1
BEGIN
drop table dtabla
END

menciono tambien que si el procedimiento lo dejan correr termina sin
problema, el problema es cuando el usuario usa ctrl+alt+supr y corta la
finalizacion del procedure.
pero lo mencionado anteriormente si arroja 1 y deberia de eliminarlo pero
no
lo hace
hago select a la tabla dtabla y esta ahi con datos y todo.
selecciono del procedure solamente:
if (select count(*) from sysobjects where xtype = 'U' and name =
'dtabla')=1
BEGIN
drop table dtabla
END
lo ejecuto y se elimina
pero al ejecutar el procedure sin correr estas lineas manualmente sale el
error mencionado anteriormente
despues todo corre normal
algo tendra que ver el CTRL-ALT-SUPR
`
definitivamente no borra el objeto DTABLA

ni con

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL

BEGIN

drop table dtabla

END



Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Luis Mata" escribió en el mensaje
news:
> Aqui les paso el procedure, ya no me sale el error cuando borro la
> tabla
> dtabla pero como se ve esta antes de la linea 13
>
> ALTER procedure [dbo].[ventas_tiendas_all] @alm char(2), @mes1
> char(10),
> @mes2 CHAR(10), @modo int,@prov char(6)
> as
> if (select count(*) from sysobjects where xtype = 'U' and name >> > 'dtabla')=1
> BEGIN
> drop table dtabla
> END
> DECLARE @CAMPO varCHAR(6),@ejecuta varchar(150),@nbd varchar(6)
> declare @vcodigo char(13),@vcantidad decimal(12,2),@ejecxbd
> varchar(200),@ejecxtie varchar(250)
> create table dtabla(proveedor char(6),codigo char(13),descripcion
> varchar(150),guia int, costo decimal(12,4),publico decimal(12,4),
> vtatotal decimal(12,2))
> if @prov=''
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10'
> end
> else
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10' and cod3provee=@prov
> end
> declare bdatos cursor for select nombre from maestro.dbo.openbd where
> based !=9
> open bdatos
> fetch next from bdatos into @nbd
> while @@fetch_status = 0
> begin
> set @campo = @nbd
> set @ejecuta = 'alter table dtabla add '+@campo+' decimal(12,2) default
> 0
> not null'
> exec (@ejecuta)
> if @prov=''
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' group by codarticul'
> end
> else
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' and proveedor='+''''+@prov+''''+'
> group by codarticul'
> end
> exec (@ejecxtie)
>
> open ventas
> fetch next from ventas into @vcodigo,@vcantidad
> while @@fetch_status = 0
> begin
> set @ejecxbd = 'update dtabla set guia = 1, '+@campo+' >> > '+cast(@vcantidad as varchar(15))+',vtatotal=vtatotal+'+cast(@vcantidad
> as
> varchar(15))+
> ' where codigo='+''''+@vcodigo+''''
> exec (@ejecxbd)
> fetch next from ventas into @vcodigo,@vcantidad
> end
> deallocate ventas
> fetch next from bdatos into @nbd
> end
> deallocate bdatos
> alter table dtabla add totalc decimal (12,2) default 0 not null
> alter table dtabla add totalp decimal (12,2) default 0 not null
> update dtabla set totalc = costo*vtatotal,totalp = publico*vtatotal
> if @modo=0
> begin
> select * from dtabla
> end
> else
> begin
> select * from dtabla where guia = 1
> end
> drop table dtabla
>
>
> Att
> Luis Mata Figueroa
> Área Informática
> Centro Cerámico Las Flores SAC
> RPC: 993597297
> TEL: 6174613
>
>
> "Gux (MVP)" escribió en el mensaje
> news:
>> Ayudaría mucho si usted muestra el procedimiento ventas_tiendas_all o
>> por
>> favor muestre la línea 13, para que no estemos adivinando.
>>
>> Gustavo Larriera, Microsoft MVP
>> https://mvp.support.microsoft.com/p...o.larriera
>> Este mensaje se proporciona tal como es, sin garantías de ninguna
>> clase.
>>
>>
>>
>> "Luis Mata" wrote:
>>
>>> este es el error
>>> Msg 213, Level 16, State 1, Procedure ventas_tiendas_all, Line 13
>>>
>>> Insert Error: Column name or number of supplied values does not match
>>> table
>>> definition.
>>>
>>> aclaro que el procedimiento primero comprueba la tabla si existe lo
>>> borra
>>> luego lo vuelve a crear, pero apesar que existe no lo borra lo tengo
>>> que
>>> borrar manualmente recien ahi funciona
>>>
>>> Att
>>> Luis Mata Figueroa
>>> Área Informática
>>> Centro Cerámico Las Flores SAC
>>> RPC: 993597297
>>> TEL: 6174613
>>>
>>>
>>> "Luis Mata" escribió en el
>>> mensaje
>>> news:eQ$
>>> > por que esto aveces funciona aveces no
>>> >
>>> > if (select count(*) from sysobjects where xtype = 'U' and name >> >>> > 'dtabla')=1
>>> >
>>> > BEGIN
>>> >
>>> > drop table dtabla
>>> >
>>> > END
>>> >
>>> > hago el select solo y da 1 pero ejecuta el procedimiento y no borra
>>> > la
>>> > tabla.
>>> >
>>> > pero correo esas lineas manualmente y si funciona
>>> >
>>> >
>>> >
>>> > Att
>>> > Luis Mata Figueroa
>>> > Área Informática
>>> > Centro Cerámico Las Flores SAC
>>> > RPC: 993597297
>>> > TEL: 6174613
>>> >
>>> >
>>> >
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#10 Luis Mata
22/05/2008 - 19:38 | Informe spam
ALTER procedure [dbo].[ventas_tiendas_all] @alm char(2), @mes1 char(10),
@mes2 CHAR(10), @modo int,@prov char(6)
as
-
IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL
BEGIN
drop table dtabla
END
-
DECLARE @CAMPO varCHAR(6),@ejecuta varchar(150),@nbd varchar(6)
declare @vcodigo char(13),@vcantidad decimal(12,2),@ejecxbd
varchar(200),@ejecxtie varchar(250)
create table dtabla(proveedor char(6),codigo char(13),descripcion
varchar(150),guia int, costo decimal(12,4),publico
decimal(12,4), LINEA 8
vtatotal decimal(12,2))
if @prov=''
begin
insert into dtabla select cod3provee,codarticul,descripcio,0 as
guia,costo3,precvendol,0 as total
from bdcho.dbo.invmatpr where coidtalm = '10'
end
else
begin
insert into dtabla select cod3provee,codarticul,descripcio,0 as
guia,costo3,precvendol,0 as total
from bdcho.dbo.invmatpr where coidtalm = '10' and cod3provee=@prov
end
declare bdatos cursor for select nombre from maestro.dbo.openbd where based
!=9
open bdatos
fetch next from bdatos into @nbd
while @@fetch_status = 0
begin
set @campo = @nbd
set @ejecuta = 'alter table dtabla add '+@campo+' decimal(12,2) default 0
not null'
exec (@ejecuta)
if @prov=''
begin
set @ejecxtie = 'declare ventas cursor for select
codarticul,sum(cantidad) as cantidad from '+@campo+
'.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
'+''''+@mes2+''''+
' and coidtalm='+''''+@alm+''''+' group by codarticul'
end
else
begin
set @ejecxtie = 'declare ventas cursor for select
codarticul,sum(cantidad) as cantidad from '+@campo+
'.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
'+''''+@mes2+''''+
' and coidtalm='+''''+@alm+''''+' and proveedor='+''''+@prov+''''+' group
by codarticul'
end
exec (@ejecxtie)

open ventas
fetch next from ventas into @vcodigo,@vcantidad
while @@fetch_status = 0
begin
set @ejecxbd = 'update dtabla set guia = 1, '+@campo+' = '+cast(@vcantidad
as varchar(15))+',vtatotal=vtatotal+'+cast(@vcantidad as varchar(15))+
' where codigo='+''''+@vcodigo+''''
exec (@ejecxbd)
fetch next from ventas into @vcodigo,@vcantidad
end
deallocate ventas
fetch next from bdatos into @nbd
end
deallocate bdatos
alter table dtabla add totalc decimal (12,2) default 0 not null
alter table dtabla add totalp decimal (12,2) default 0 not null
update dtabla set totalc = costo*vtatotal,totalp = publico*vtatotal
if @modo=0
begin
select * from dtabla
end
else
begin
select * from dtabla where guia = 1
end
drop table dtabla


de mi procedimiento las lineas que resalte no se ejecutan cuando digamos
intencionalmente detuve la ejecucion del proc que lo creo en la linea 8
me sale este error cuando ejecuto con la tabla ya existiendo en la BD
Msg 213, Level 16, State 1, Procedure ventas_tiendas_all, Line 14

Insert Error: Column name or number of supplied values does not match table
definition.

del procedimiento selecciono manualmente las lineas :

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL
BEGIN
drop table dtabla
END

los ejecuto y me borra la tabla
ejecuto todo el procedimiento y ahi recien corre osea no puede eliminar la
tabla existente o algo asi?

Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Gux (MVP)" escribió en el mensaje
news:
Estoy algo confundido. Usted dice que si "el procedimiento lo dejan correr
termina sin problema, el problema es cuando el usuario usa ctrl+alt+supr"

Cuál es el sentido que el usuario haga CTRL-ALT-DEL para interrumpir?

Mirado así sin los detalles, es casi como decir "todo funciona bien
excepto
cuando cortamos la energía eléctrica". Y no es para menos verdad? :-)

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Luis Mata" wrote:

este resultado me sale 1
select count(*) from sysobjects where xtype = 'U' and name = 'dtabla'
que segun el procedimiento deberia de eliminarlo para volver a crearlo
con
if (select count(*) from sysobjects where xtype = 'U' and name =
'dtabla')=1
BEGIN
drop table dtabla
END

menciono tambien que si el procedimiento lo dejan correr termina sin
problema, el problema es cuando el usuario usa ctrl+alt+supr y corta la
finalizacion del procedure.
pero lo mencionado anteriormente si arroja 1 y deberia de eliminarlo pero
no
lo hace
hago select a la tabla dtabla y esta ahi con datos y todo.
selecciono del procedure solamente:
if (select count(*) from sysobjects where xtype = 'U' and name =
'dtabla')=1
BEGIN
drop table dtabla
END
lo ejecuto y se elimina
pero al ejecutar el procedure sin correr estas lineas manualmente sale el
error mencionado anteriormente
despues todo corre normal
algo tendra que ver el CTRL-ALT-SUPR
`
definitivamente no borra el objeto DTABLA

ni con

IF OBJECT_ID('dbo.dtabla', 'U') IS NOT NULL

BEGIN

drop table dtabla

END



Att
Luis Mata Figueroa
Área Informática
Centro Cerámico Las Flores SAC
RPC: 993597297
TEL: 6174613


"Luis Mata" escribió en el mensaje
news:
> Aqui les paso el procedure, ya no me sale el error cuando borro la
> tabla
> dtabla pero como se ve esta antes de la linea 13
>
> ALTER procedure [dbo].[ventas_tiendas_all] @alm char(2), @mes1
> char(10),
> @mes2 CHAR(10), @modo int,@prov char(6)
> as
> if (select count(*) from sysobjects where xtype = 'U' and name >> > 'dtabla')=1
> BEGIN
> drop table dtabla
> END
> DECLARE @CAMPO varCHAR(6),@ejecuta varchar(150),@nbd varchar(6)
> declare @vcodigo char(13),@vcantidad decimal(12,2),@ejecxbd
> varchar(200),@ejecxtie varchar(250)
> create table dtabla(proveedor char(6),codigo char(13),descripcion
> varchar(150),guia int, costo decimal(12,4),publico decimal(12,4),
> vtatotal decimal(12,2))
> if @prov=''
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10'
> end
> else
> begin
> insert into dtabla select cod3provee,codarticul,descripcio,0 as
> guia,costo3,precvendol,0 as total
> from bdcho.dbo.invmatpr where coidtalm = '10' and cod3provee=@prov
> end
> declare bdatos cursor for select nombre from maestro.dbo.openbd where
> based !=9
> open bdatos
> fetch next from bdatos into @nbd
> while @@fetch_status = 0
> begin
> set @campo = @nbd
> set @ejecuta = 'alter table dtabla add '+@campo+' decimal(12,2) default
> 0
> not null'
> exec (@ejecuta)
> if @prov=''
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' group by codarticul'
> end
> else
> begin
> set @ejecxtie = 'declare ventas cursor for select
> codarticul,sum(cantidad) as cantidad from '+@campo+
> '.dbo.archtra3 where fecha between '+''''+@mes1+''''+' and
> '+''''+@mes2+''''+
> ' and coidtalm='+''''+@alm+''''+' and proveedor='+''''+@prov+''''+'
> group by codarticul'
> end
> exec (@ejecxtie)
>
> open ventas
> fetch next from ventas into @vcodigo,@vcantidad
> while @@fetch_status = 0
> begin
> set @ejecxbd = 'update dtabla set guia = 1, '+@campo+' >> > '+cast(@vcantidad as varchar(15))+',vtatotal=vtatotal+'+cast(@vcantidad
> as
> varchar(15))+
> ' where codigo='+''''+@vcodigo+''''
> exec (@ejecxbd)
> fetch next from ventas into @vcodigo,@vcantidad
> end
> deallocate ventas
> fetch next from bdatos into @nbd
> end
> deallocate bdatos
> alter table dtabla add totalc decimal (12,2) default 0 not null
> alter table dtabla add totalp decimal (12,2) default 0 not null
> update dtabla set totalc = costo*vtatotal,totalp = publico*vtatotal
> if @modo=0
> begin
> select * from dtabla
> end
> else
> begin
> select * from dtabla where guia = 1
> end
> drop table dtabla
>
>
> Att
> Luis Mata Figueroa
> Área Informática
> Centro Cerámico Las Flores SAC
> RPC: 993597297
> TEL: 6174613
>
>
> "Gux (MVP)" escribió en el mensaje
> news:
>> Ayudaría mucho si usted muestra el procedimiento ventas_tiendas_all o
>> por
>> favor muestre la línea 13, para que no estemos adivinando.
>>
>> Gustavo Larriera, Microsoft MVP
>> https://mvp.support.microsoft.com/p...o.larriera
>> Este mensaje se proporciona tal como es, sin garantías de ninguna
>> clase.
>>
>>
>>
>> "Luis Mata" wrote:
>>
>>> este es el error
>>> Msg 213, Level 16, State 1, Procedure ventas_tiendas_all, Line 13
>>>
>>> Insert Error: Column name or number of supplied values does not match
>>> table
>>> definition.
>>>
>>> aclaro que el procedimiento primero comprueba la tabla si existe lo
>>> borra
>>> luego lo vuelve a crear, pero apesar que existe no lo borra lo tengo
>>> que
>>> borrar manualmente recien ahi funciona
>>>
>>> Att
>>> Luis Mata Figueroa
>>> Área Informática
>>> Centro Cerámico Las Flores SAC
>>> RPC: 993597297
>>> TEL: 6174613
>>>
>>>
>>> "Luis Mata" escribió en el
>>> mensaje
>>> news:eQ$
>>> > por que esto aveces funciona aveces no
>>> >
>>> > if (select count(*) from sysobjects where xtype = 'U' and name >> >>> > 'dtabla')=1
>>> >
>>> > BEGIN
>>> >
>>> > drop table dtabla
>>> >
>>> > END
>>> >
>>> > hago el select solo y da 1 pero ejecuta el procedimiento y no borra
>>> > la
>>> > tabla.
>>> >
>>> > pero correo esas lineas manualmente y si funciona
>>> >
>>> >
>>> >
>>> > Att
>>> > Luis Mata Figueroa
>>> > Área Informática
>>> > Centro Cerámico Las Flores SAC
>>> > RPC: 993597297
>>> > TEL: 6174613
>>> >
>>> >
>>> >
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida