Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

advaldomesquita

Salvar resultado de procedure em tabela (temporaria ou nao)

Recommended Posts

Ola.

 

Estou tentando fazer com que o resultado de uma procedure seja armazenado em uma tabela (pode ser temporaria ou nao) deste modo:

 

create table #teste (a int, 2 varchar(50) )

 

insert into #teste(a,b )

exec procedure

 

select # from teste

drop table #teste

 

Acontece que qdo tento deste modo aparece o erro:

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].

 

Pesquisei na net e encontrei alguns casos falando do MTSC, mas no server esta ok. Como que eu faço?! Não posso alterar a procedure =\ :wacko:

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei aqui e funcionou,

 

procedure de teste

CREATE PROC XMEN
@id varchar(50)
AS

SELECT au_id, au_lname FROM PUBS..AUTHORS where au_id = @id

 

select de testes:

create table #teste (a varchar(50), b varchar(50) )

insert into #teste(a,b )
exec XMEN '648-92-1872'

select * from #teste
drop table #teste

retorna:

(1 row(s) affected)

a												  b												  
-------------------------------------------------- -------------------------------------------------- 
648-92-1872										Blotchet-Halls

(1 row(s) affected)

 

se executar só a sua procedure o que retorna ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Eriva,

 

vamos por partes como sempre.

 

Do modo que você fez, aki tb funciona, porem qdo utilizo as minhas procedures da o erro que esta no 1. post.

 

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].

 

 

abaixo a sequencia que estou fazendo:

create table #teste 
(ho_Campanha INT, ca_Nome Varchar(60), ho_Lote INT, lt_Descr Varchar(60), ho_CodTime INT, ti_Nome_Time Varchar(50), ho_StatusUltPos INT
, su_Descricao VarChar(60), ho_Mot_PAI INT, ho_Desc_PAI Varchar(100), ho_Mot_FILHO INT, ho_Desc_FILHO Varchar(100), ho_Quantidade INT
, Data varchar(20) )

insert into #teste(ho_Campanha ,
ca_Nome ,ho_Lote ,lt_Descr ,ho_CodTime ,ti_Nome_Time ,ho_StatusUltPos 
, su_Descricao,ho_Mot_PAI,ho_Desc_PAI,ho_Mot_FILHO,ho_Desc_FILHO,ho_Quantidade ,Data )

exec spr_rel_customercare_atividade_mailing '2008-02-01','2008-02-01','TEL17','545',null,null


select # from teste

drop table #teste

error:

Server: Msg 7391, Level 16, State 1, Procedure spr_rel_customercare_atividade_mailing, Line 26

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].

 

Quando executado somente a procedure, mostra os dados de modo correto, e é este resultado que quero em uma tabela.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você mudar pra modo texto o retorno, tenta ver se não tem nenhum print antes do retorno do select pela procedure

 

outra coisa: tenta ver o que tem na linha 26... o seu retorna de erro fala dessa linha na procedure Line 26

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Eriva,

 

o problema é bem mais complexo do que imaginei.

Esta procedure faz uma serie de consultas entre servidores (linked server), e com isso o MSTC tem q estar habilitado e atualizado em todos os servidores.

Mesmo assim ainda continou o erro. Tentei resolver com este link http://support.microsoft.com/kb/329332/en-us mas nada, entao contornei de outro modo:

 

-- exporta resultado da procedure para um txt na unidade C do servidor

use master
exec xp_cmdshell 'BCP "exec DATABASE.dbo.spr_rel_customercare_atividade_mailing ''2008-02-01'',''2008-02-01'',''TEL17'',''545'',null,null" queryout c:\result.txt -E -c -T -Sserver' 

-- importa arquivo do Server para uma tabela temporária,pode ser uma tabela física se necessária
-- ATENCAO NO TAMANHO DOS CAMPOS, TIVE QUE MODIFICAR

create table #temp
(ho_Campanha INT, ca_Nome Varchar(60), ho_Lote INT, lt_Descr Varchar(60), ho_CodTime INT, ti_Nome_Time Varchar(50), ho_StatusUltPos INT
, su_Descricao VarChar(60), ho_Mot_PAI INT, ho_Desc_PAI Varchar(1000), ho_Mot_FILHO INT, ho_Desc_FILHO Varchar(1000), ho_Quantidade INT, Data varchar(20) )


BULK INSERT #temp
FROM 'C:\result.txt'
WITH (
	  FIELDTERMINATOR = '	',
	  ROWTERMINATOR = '\n'
	  )

select * from #temp

drop table #temp

foi assim que consegui resolver, pode nao ser o correto, mas funcionou.

 

Vlw ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.