Problemas para Insertar datos en tabla temporal

13/07/2005 - 23:43 por Carlo Sorrel | Informe spam
Estimados, necesito su ayuda. Tengo un procedimiento almacenado que me
genera una salida, y esta la quiero insertar en una tabla temporal, pero no
me lo permite (la consulta es a un servidor Vinculado), me arroja el
siguiente error...

Servidor: mensaje 7391, nivel 16, estado 1, procedimiento
IGC_SEL_relacion_vend_zona_cd_vigente, línea 48
The operation could not be performed because the OLE DB provider 'SQLOLEDB'
was unable to begin a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the
specified transaction coordinator. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

La sentencia es la siguiente:

create table #vendedores_zonas_cd (
fecha datetime NULL,
cod_cd integer NULL ,
nombre_cd varchar(50) NULL ,
cod_zona integer NULL ,
nombre_zona varchar(50) NULL ,
cod_superv varchar(15) NULL,
nombre_superv varchar(50) NULL,
rut_vend varchar(15) NULL,
cod_vend integer NULL ,
nombre_vend varchar(50) NULL ,
finiquitado tinyint NULL )
insert into #vendedores_zonas_cd
exec IGC_SEL_relacion_vend_zona_cd_vigente '05-07-2005', '05-07-2005', null,
null

Esto se puede hacer...???
Les adjunto ademas el Procedimiento IGC_SEL_relacion_vend_zona_cd_vigente

de consulta.
CREATE PROCEDURE dbo.IGC_SEL_relacion_vend_zona_cd_vigente ( @finicio_char
varchar(10), @ftermino_char varchar(10), @finicio_date datetime,
@ftermino_date datetime )

AS

set dateformat MDY

declare @fechaConsulta datetime, @fecha_inicio datetime, @fecha_termino
datetime

if (len(@finicio_char) > 0) and (len(@ftermino_char) > 0)
begin
set @fecha_inicio = convert(datetime, @finicio_char, 102)
set @fecha_termino = convert(datetime, @ftermino_char, 102)
end
else
begin
set @fecha_inicio = @finicio_date
set @fecha_termino = @ftermino_date
end
-
-
create table #salida (
fecha datetime NULL,
cod_cd integer NULL ,
nombre_cd varchar(50) NULL ,
cod_zona integer NULL ,
nombre_zona varchar(50) NULL ,
cod_superv varchar(15) NULL,
nombre_superv varchar(50) NULL,
rut_vend varchar(15) NULL,
cod_vend integer NULL ,
nombre_vend varchar(50) NULL ,
finiquitado tinyint NULL
)
select *
into #sgcv_vendedores
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select * from
sgcv..sgcv_vendedores')
[lanin-sql].sgcv.dbo.sgcv_vendedores


select *
into #sgcv_vendedores_historico
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select * from
sgcv..sgcv_vendedores_historico')
[lanin-sql].sgcv.dbo.sgcv_vendedores_historico


select *
into #sgcv_zonas
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select * from
sgcv..sgcv_zonas')
[lanin-sql].sgcv.dbo.sgcv_zonas
-
-
select *
into #sgcv_zonas_historico
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select * from
sgcv..sgcv_zonas_historico')
[lanin-sql].sgcv.dbo.sgcv_zonas_historico


select *
into #sgcv_cdistribucion
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select * from
sgcv..sgcv_cdistribucion')
[lanin-sql].sgcv.dbo.sgcv_cdistribucion
order by id_cd

while ( @fecha_inicio <= @fecha_termino )
begin
set @fechaConsulta = dateadd(ms,-2,dateadd(day,1,@fecha_inicio))


select v.id_vendedor,
v.idv,
v.nombre,
z.id_zona,
v.finiquitado
into #vend_zona_actual
from #sgcv_vendedores v inner join
#sgcv_zonas z on v.id_zona = z.id_zona
order by v.idv
select idv,
max(fecha_modific) fecha_modific
into #cambios_vendedor
from #sgcv_vendedores_historico
where fecha_modific <= @fechaConsulta
group by idv
-
-
select b.id_vendedor,
a.idv,
b.nombre,
b.id_zona,
b.finiquitado
into #vend_zona_anterior
from #cambios_vendedor a inner join
#sgcv_vendedores_historico b on b.idv = a.idv and b.fecha_modific =
a.fecha_modific
order by a.idv
 

Leer las respuestas

#1 Jorge Martinez
13/07/2005 - 23:54 | Informe spam
Has probado a hacer algo mas sencillo para ver por donde pueden ir los tiros
?, como hacer un DTS sencillo utilizando ese servidor vinculado e insertar
datos de una de sus tablas en tu BD local.

A ver que pasa. Creo que hay que ir probando cosas.

SalU2


"Carlo Sorrel" escribió en el mensaje
news:#9QAmO$
Estimados, necesito su ayuda. Tengo un procedimiento almacenado que me
genera una salida, y esta la quiero insertar en una tabla temporal, pero


no
me lo permite (la consulta es a un servidor Vinculado), me arroja el
siguiente error...

Servidor: mensaje 7391, nivel 16, estado 1, procedimiento
IGC_SEL_relacion_vend_zona_cd_vigente, línea 48
The operation could not be performed because the OLE DB provider


'SQLOLEDB'
was unable to begin a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the
specified transaction coordinator. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

La sentencia es la siguiente:

create table #vendedores_zonas_cd (
fecha datetime NULL,
cod_cd integer NULL ,
nombre_cd varchar(50) NULL ,
cod_zona integer NULL ,
nombre_zona varchar(50) NULL ,
cod_superv varchar(15) NULL,
nombre_superv varchar(50) NULL,
rut_vend varchar(15) NULL,
cod_vend integer NULL ,
nombre_vend varchar(50) NULL ,
finiquitado tinyint NULL )
insert into #vendedores_zonas_cd
exec IGC_SEL_relacion_vend_zona_cd_vigente '05-07-2005', '05-07-2005',


null,
null

Esto se puede hacer...???
Les adjunto ademas el Procedimiento IGC_SEL_relacion_vend_zona_cd_vigente



fecha
de consulta.
CREATE PROCEDURE dbo.IGC_SEL_relacion_vend_zona_cd_vigente (


@finicio_char
varchar(10), @ftermino_char varchar(10), @finicio_date datetime,
@ftermino_date datetime )

AS

set dateformat MDY

declare @fechaConsulta datetime, @fecha_inicio datetime, @fecha_termino
datetime

if (len(@finicio_char) > 0) and (len(@ftermino_char) > 0)
begin
set @fecha_inicio = convert(datetime, @finicio_char, 102)
set @fecha_termino = convert(datetime, @ftermino_char, 102)
end
else
begin
set @fecha_inicio = @finicio_date
set @fecha_termino = @ftermino_date
end
-
-
create table #salida (
fecha datetime NULL,
cod_cd integer NULL ,
nombre_cd varchar(50) NULL ,
cod_zona integer NULL ,
nombre_zona varchar(50) NULL ,
cod_superv varchar(15) NULL,
nombre_superv varchar(50) NULL,
rut_vend varchar(15) NULL,
cod_vend integer NULL ,
nombre_vend varchar(50) NULL ,
finiquitado tinyint NULL
)
select *
into #sgcv_vendedores
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select *


from
sgcv..sgcv_vendedores')
[lanin-sql].sgcv.dbo.sgcv_vendedores


select *
into #sgcv_vendedores_historico
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select *


from
sgcv..sgcv_vendedores_historico')
[lanin-sql].sgcv.dbo.sgcv_vendedores_historico


select *
into #sgcv_zonas
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select *


from
sgcv..sgcv_zonas')
[lanin-sql].sgcv.dbo.sgcv_zonas
-
-
select *
into #sgcv_zonas_historico
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select *


from
sgcv..sgcv_zonas_historico')
[lanin-sql].sgcv.dbo.sgcv_zonas_historico


select *
into #sgcv_cdistribucion
from --openrowset('SQLOLEDB', 'LANIN-SQL'; 'SGCV'; 'svcg2142','select *


from
sgcv..sgcv_cdistribucion')
[lanin-sql].sgcv.dbo.sgcv_cdistribucion
order by id_cd

while ( @fecha_inicio <= @fecha_termino )
begin
set @fechaConsulta = dateadd(ms,-2,dateadd(day,1,@fecha_inicio))


select v.id_vendedor,
v.idv,
v.nombre,
z.id_zona,
v.finiquitado
into #vend_zona_actual
from #sgcv_vendedores v inner join
#sgcv_zonas z on v.id_zona = z.id_zona
order by v.idv
select idv,
max(fecha_modific) fecha_modific
into #cambios_vendedor
from #sgcv_vendedores_historico
where fecha_modific <= @fechaConsulta
group by idv
-
-
select b.id_vendedor,
a.idv,
b.nombre,
b.id_zona,
b.finiquitado
into #vend_zona_anterior
from #cambios_vendedor a inner join
#sgcv_vendedores_historico b on b.idv = a.idv and b.fecha_modific > a.fecha_modific
order by a.idv
-


periodoconsultado -- -
select isnull(anterior.id_vendedor,
actual.id_vendedor) 'id_vendedor', isnull(anterior.idv, actual.idv) 'idv',
isnull(anterior.nombre, actual.nombre) 'nombre', isnull(anterior.id_zona,
actual.id_zona) 'id_zona', isnull(anterior.finiquitado, actual.finiquitado)
'finiquitado' into #vend_zona_vigente from #vend_zona_actual actual full
join #vend_zona_anterior anterior on actual.id_vendedor anterior.id_vendedorand actual.idv = anterior.idv --
ZONAS -- -- -- Rescata
movimientos de zonas de tabla historica -- -- Para determinar que zonas han
cambiado -- -- -
-Estado actual de las zonas -- select c.id_cd, c.ubicacion 'nombre_cd',
z.id_zona, z.nombre 'nombre_zona', z.id_supervisor into #zona_actual from
#sgcv_zonas z inner join #sgcv_cdistribucion c on z.id_cd = c.id_cd order
by z.id_zona -- Rescata fecha
de ultimas modificaciones --
select id_zona, max(fecha_modific) fecha_modific into #cambios_zona from
#sgcv_zonas_historico where fecha_modific <= @fechaConsulta group by
id_zona -- -- Estado de las
zonas a la fecha
consultada -- -- select
c.id_cd, c.ubicacion 'nombre_cd', a.id_zona, b.nombre 'nombre_zona',
b.id_supervisor into #zona_anterior from #cambios_zona a inner join
#sgcv_zonas_historico b on b.id_zona = a.id_zona and b.fecha_modific
=a.fecha_modific inner join #sgcv_cdistribucion c on b.id_cd = c.id_cd
order by
a.id_zona
consultado -- --
isnull(anterior.nombre_cd, actual.nombre_cd) 'nombre_cd',
isnull(anterior.id_zona, actual.id_zona) 'id_zona',
isnull(anterior.nombre_zona, actual.nombre_zona) 'nombre_zona',
isnull(anterior.id_supervisor, actual.id_supervisor) 'id_supervisor',
supervisores.nombre 'nombre_superv' into #zona_cd_vigente from #zona_actual
actual full join #zona_anterior anterior on actual.id_cd = anterior.id_cd
andactual.id_zona = anterior.id_zona left join #sgcv_vendedores
supervisores on supervisores.id_vendedor =isnull(anterior.id_supervisor,
actual.id_supervisor) -- RESUMEN
FINAL -- -- --
Inserta datos de detalle y muestra estado del
periodo -- --
insert into #salida select @fecha_inicio 'fecha', zcv.id_cd 'cod_cd',
zcv.nombre_cd, vzv.id_zona 'cod_zona', zcv.nombre_zona, zcv.id_supervisor
'cod_superv', zcv.nombre_superv, vzv.id_vendedor 'rut_vend', vzv.idv
'cod_vend', vzv.nombre 'nombre_vend', vzv.finiquitado from
#vend_zona_vigente vzv inner join #zona_cd_vigente zcv on vzv.id_zona zcv.id_zona -- Elimina tabla de
paso -- drop table #cambios_vendedor drop table
#vend_zona_actual drop table #vend_zona_anterior drop table
#vend_zona_vigente drop table #zona_actual drop table #cambios_zona drop
table #zona_anterior drop table #zona_cd_vigente set @fecha_inicio dateadd(day,1,@fecha_inicio)end-- Datos de
salida --select * from #salida order by fecha,
cod_vend-- Elimina tabla de
paso --drop table #sgcv_vendedoresdrop table
#sgcv_vendedores_historicodrop table #sgcv_zonasdrop table
#sgcv_zonas_historicodrop table #sgcv_cdistribucionGOGracias y Saludos de
antemano.Atte.,Carlo Sorrel

Preguntas similares