2010-11-04 13 views
2

J'essaie d'exécuter une requête sur un serveur lié, mais j'ai besoin des résultats localement.Possibilité d'utiliser la syntaxe "INSERT INTO @VARIABLE EXEC() AT LINKED_SERVER"? (SQL Server 2005)

DECLARE @test TABLE 
(
greeting CHAR(5) 
) 

INSERT INTO @test 
EXEC('select ''hello'' as greeting') 

SELECT * FROM @test 

utilise un EXEC() et INSERT INTO mais, de toute évidence, la requête est en cours d'exécution au niveau local.

DECLARE @test TABLE 
(
greeting CHAR(5) 
) 

INSERT INTO @test 
EXEC('select ''hello'' as greeting') AT LINKED_SERVER 

SELECT * FROM @test 

Ne fonctionne pas du tout.

SELECT greeting FROM OpenQuery(LINKED_SERVER,'SELECT''hello'' AS greeting')

Accomplit exactement ce que je veux, mais je dois être en utilisant une chaîne dynamique, et la seule façon de faire que le travail est de faire toute ma requête une chaîne énorme et le mettre dans un exec() , que je ne veux pas faire car il est vraiment moche ....

Merci pour toute aide!

+0

Votre version intermédiaire fonctionne pour moi dans un cas de test simple. Quel est le problème exact que vous rencontrez avec? –

+0

Il est dit qu'une transaction distribuée n'est pas supportée par le serveur. Je devrais probablement mentionner que le serveur lié n'est pas un autre SQL Server mais un OLE DB. – nosirrahcd

+0

Mais il est bon de savoir, au moins que ce que j'essaie de faire n'est probablement pas possible avec une base de données OLE puisque la syntaxe est valide. – nosirrahcd

Répondre

2

Vous pouvez utiliser les éléments suivants:

INSERT INTO @test 
EXEC('select TOP 1 ''hello'' as greeting FROM LINKED_SERVER.SomeDB.dbo.SysObjects') 

Et en supposant que vous ne voulez pas en fait juste obtenir le mot « bonjour » ... vous probablement voulez faire quelque chose comme en fait la sélection d'une valeur de une table, alors ce qui précède devrait être encore plus probable ce que vous voulez.