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

Preguntas similare

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

Respuesta Responder a este mensaje
#2 Antonio Soto
14/07/2005 - 08:46 | Informe spam
Hola Carlos.

Como ves en el error, esa operación requiere de una transacción distribuida
para realizarse correctamente. Es posible que sea por el select ...into pero
ahora no puedo comprobarlo. De todos modos comprueba con sp_configure el
valor del parámetro "remote proc trans". Si ese parámetro está 1, está
exigiendo transacciones distribuidas para las operaciones entre servidores.
Si no es así (está a 0),m quiere decir que esas operaciones que estás
realizando necesitan estar en una transacción distribuida, por lo que
tendrás que asegurarte de tener arrancado el servidio MSDTC en ambos
servidores

Saludos


"Carlo Sorrel" escribió en el mensaje
news:%239QAmO$
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 -- --
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 -- -
select isnull(anterior.id_cd, actual.id_cd) 'id_cd',
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

Respuesta Responder a este mensaje
#3 Carlo Sorrel
14/07/2005 - 16:55 | Informe spam
Muchas Gracias Antonio, revise esa configuración y funciono..., por lo que
veo, nunca utilizamos transacciones distribuidas, a pesar de consultar
servidores externos y linkeados..., pero bueno..., siempre se aprende algo
nuevo..., gracias nuevamente...
Saludos.

Atte.,
Carlo Sorrel
"Antonio Soto" <antoniosotorodriguezARROBAhotmail.comQUITAR> escribió en el
mensaje news:
Hola Carlos.

Como ves en el error, esa operación requiere de una transacción
distribuida para realizarse correctamente. Es posible que sea por el
select ...into pero ahora no puedo comprobarlo. De todos modos comprueba
con sp_configure el valor del parámetro "remote proc trans". Si ese
parámetro está 1, está exigiendo transacciones distribuidas para las
operaciones entre servidores. Si no es así (está a 0),m quiere decir que
esas operaciones que estás realizando necesitan estar en una transacción
distribuida, por lo que tendrás que asegurarte de tener arrancado el
servidio MSDTC en ambos servidores

Saludos


"Carlo Sorrel" escribió en el mensaje
news:%239QAmO$
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 -- --
'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 -- -
select isnull(anterior.id_cd, actual.id_cd) 'id_cd',
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





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