Announcement

Collapse
No announcement yet.

Remoteabfrgaen mit Parameter(n)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Remoteabfrgaen mit Parameter(n)

    Die Funktionen OPENROWSET und OPENQUERY nehmen keine Parameter auf. Wie kann ich dieses Problem umgehen? Hintergrund:
    Ich möchte über einen Verbindungsserver einen fremden Server abfragen, wobei nur das Resultset auf den lokalen Server übertragen werden soll. Dabei sollen über das Frontend die Parameter der gespeicherten Prozedur zur Abfrage übergeben werden können, die dann in die WHERE-Klausel aufgenommen werden.
    Also z.B.
    Create Prozedure @Name varchar(20)='Meier' as Select * From Openrowset(....,....,'Select * From Tabelle1 WHERE Name=@Name')

  • #2
    Hallo,

    so richtig verstehe ich die Frage nicht. Es wird nach der Lösung für ein Problem gesucht, das gar nicht existiert :-)

    Angenommen, in der eigenen Datenbank wird einmalig die folgende Stored Procedure angelegt:
    <pre>
    <b>CREATE</b> <b>PROCEDURE</b> ExecuteOPENROWSET
    (
    @sParameter <b>VARCHAR</b>(50)
    )
    <b>AS</b>
    <b>SELECT</b> * <b>FROM</b> OPENROWSET(<font color="#9933CC">'SQLOLEDB'</font>,<font color="#9933CC">'192.168.10.1'</font>;<font color="#9933CC">'sa'</font>;<font color="#9933CC">'passwort'</font>,Northwind.dbo.Customers)
    <b>WHERE</b> CustomerID = @sParameter
    <b>GO</b>
    </pre>
    Wenn dann zum Beispiel diese Stored Procedure aufgerufen wird (Bsp: <i>EXEC ExecuteOPENROWSET 'ALFKI'</i>), protokolliert der <i>MS SQL Server Profiler</i> beim Ziel-Server die folgende Anweisung mit:
    <br><br>
    <i>declare @P1 int
    set @P1=5
    exec sp_prepexec @P1 output, N'@P1 varchar(50)', N'SELECT Tbl1001."CustomerID" Col1003,Tbl1001."CompanyName" Col1004,Tbl1001."ContactName" Col1005,Tbl1001."ContactTitle" Col1006,Tbl1001."Address" Col1007,Tbl1001."City" Col1008,Tbl1001."Region" Col1009,Tbl1001."PostalCode" Col1010,Tbl1001."Country" Col1011,Tbl1001."Phone" Col1012,Tbl1001."Fax" Col1013 FROM "Northwind"."dbo"."Customers" Tbl1001 <b>WHERE</b> Tbl1001."CustomerID"=CONVERT(nchar(50),<b>@P1</b>,0)', <b>'ALFKI'</b>
    select @P1
    </i>
    <br><br>
    Beim Ziel-Server ist somit die parametisierte SELECT-Abfrage eingetroffen, so dass der über OPENROWSET angesprochene SQL Server nur die Ergebnismenge der WHERE-Einschränkung zurückliefert (in meinem Beispiel also nur einen einzigen Datensatz)

    Comment


    • #3
      Danke, Herr Kosch, für die prompte Antwort am frühen Morgen!..."Es wird nach der Lösung für ein Problem gesucht, das gar nicht existiert :-) "... UM SO BESSER. Ich dachte, die Variable muß INNERHALB der Klammer (als Funktionsargument)stehen, um schon beim Zielserver eine Resultset aus z.B. 1 Datensatz zu erzeugen und nicht die ganze Tabelle zum aufrufenden Server zu holen und DANN zu selectieren

      Comment

      Working...
      X