2017-05-18 29 views
0

Angenommen, ich habe diese AbfrageWie OPENROWSET Arbeit mit sp_MSforeachdb

 declare @sql varchar(max) 
     SET @sql = 'USE [?]; 
     insert into table 
     SELECT * 
     FROM OPENROWSET(''SQLNCLI'', 
          ''Server=SERBERNAME;Trusted_Connection=yes;'', 
          ''SET FMTONLY OFF; SET NOCOUNT ON; exec db_name().dbo.sp_procedure'' 
       ) ' 

        EXEC sp_MSforeachdb @sql 

machen, wie Sie sp_MSforeachdb wissen verwendet wird Verfahren unter allen DBs zu laufen. Im obigen Problem, aus vielen Gründen, habe ich verwenden OPENROWSET.

Aber, in OPENROWSET, müssen Sie DB-Namen angeben, damit es richtig ausgeführt wird. Wie kann ich über jede einzelne db arbeiten (irgendwie ausnutzen db_name())?

Derzeit Fehler ist:

OLE DB-Provider "SQLNCLI10" für den Verbindungsserver "(null)" zurückgegeben Meldung "Latente können vorbereiten nicht abgeschlossen werden.".

+0

/Sie versuchen dann in einem Server alle Datenbanken in einer Schleife, warum Sie OpenRowset brauchen? –

+0

@KannanKandasamy, gerade aktualisiert Post. Ich möchte in Tabelle Sachen von SP einfügen. Wenn ich..exec einfüge, wird der Fehler ausgegeben, dass die verschachtelte insert..exec nicht ausgeführt werden kann. Also, ich versuche OPENROWSET hier – Sher

Antwort

0

Ich glaube, Sie sind für diese Suche:

declare @sql varchar(max) 
    SET @sql = 'USE [?];   
    SET NOCOUNT ON; 
    exec dbo.sp_procedure' 
EXEC sp_MSforeachdb @sql 
+0

gerade aktualisierten Beitrag zu verwenden. Ich möchte in Tabelle Sachen von SP einfügen. Wenn ich..exec einfüge, wird der Fehler ausgegeben, dass die verschachtelte insert..exec nicht ausgeführt werden kann. Also versuche ich OPENROWSET hier zu verwenden – Sher