Eu preciso de um procedimento armazenado para verificar o espaço livre em 2 servidores vinculados. (os servidores são vinculados manualmente). Eu criei uma consulta como esta e usando o SQL Server 2008
ALTER PROCEDURE freespace
AS
BEGIN
CREATE Table #freespace(drive VARCHAR(50),freedrivespace VARCHAR(50));
DECLARE @servername VARCHAR(50);
DECLARE @sql VARCHAR(100);
DECLARE @space CURSOR;
SET @space= CURSOR FOR
SELECT Name FROM SERVERNAME;
OPEN @space;
FETCH NEXT
FROM @space INTO @servername;
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql = '['+@servername+']...xp_fixeddrives';
INSERT INTO #freespace
EXEC(@sql);
FETCH NEXT FROM @space INTO @servername;
END
CLOSE @space;
DEALLOCATE @space;
END
A servername
tabela consiste em servername de servidores vinculados como server1, server2.
Quando executo esta consulta, um erro como este é exibido:
Msg 7202, Level 11, State 2, Line 1
Could not find server 'server1' in sys.servers. Verify that the correct server name
was specified. If necessary, execute the stored procedure sp_addlinkedserver to add
the server to sys.servers.
(0 row(s) affected)
OLE DB provider "SQLNCLI10" for linked server "server1" returned message "No
transaction is active.".
Msg 7391, Level 16, State 2, Line 1
The operation could not be performed because OLE DB provider "SQLNCLI10" for linked
server "server1" was unable to begin a distributed transaction.
Acho que o problema é com o SQL dinâmico. Eu tentei muitas alterações nesta consulta, mas ainda recebo esse erro.
Atualizar
agora eu preciso incluir o servername também na tabela para isso se eu criar uma coluna extra 'servername' e usar esta consulta para inserir valores
SET @sql = insert into #freespace values(@servername,['+@servername+']...xp_fixeddrives');
EXEC(@sql);
Mas dá um erro, por favor me ajude
Eu recriei seu cenário no meu servidor de teste que possui 2 servidores vinculados que foram criados manualmente.
Os resultados para o meu servidor são:
Concedido, os resultados não são exatamente utilizáveis, pois o nome do servidor não é mostrado, mas funciona. Isso me diz que o problema não está no seu SQL dinâmico; o problema está na configuração do servidor vinculado.
Você é capaz de executar manualmente uma consulta simples, como:
Isso deve retornar resultados ou provavelmente o mesmo erro que você está vendo acima.