Announcement

Collapse
No announcement yet.

Problem mit Übergabe von Parametern an eine Stored Procedure

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

  • Problem mit Übergabe von Parametern an eine Stored Procedure

    MS SQL 2000

    Hallo zusammen,

    habe folgende Situation. Ich möchte an eine Stored Procedure eine Liste von IDs (Interger-Typ) übergeben, und diese in der Procedure wie folgt abfragen. Geht das ?

    select * from Test where (tst_ts2_id in(@test))

    tst_ts2_id ist vom Typ Integer. Wenn ich allerdings die Variable @test als varchar() definire versteht er das nicht. Gib es dafür eine Lösung ?

    mfg

    Astner Klaus

  • #2
    Hallo,

    eine Lösung für diese Aufgabe könnte so aussehen (auch wenn der EXEC-Aufruf die Performance-Vorteile einer Stored Procedure zunichte macht):
    <pre>
    <b>USE</b> tempdb
    <b>GO</b>
    <br>
    <b>CREATE</b> <b>TABLE</b> SETTBL
    (
    RecID <b>INTEGER</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
    <b>Value</b> <b>VARCHAR</b>(9) <b>NOT</b> <b>NULL</b>
    )
    <b>GO</b>
    <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 1'</font>)
    <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 2'</font>)
    <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 3'</font>)
    <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 4'</font>)
    <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 5'</font>)
    <b>GO</b>
    <br>
    <b>CREATE</b> <b>PROCEDURE</b> CheckIDinSet
    (
    @sIDList <b>VARCHAR</b>(20)
    )
    <b>AS</b>
    <b>DECLARE</b> @sSQL <b>VARCHAR</b>(250)
    <b>SET</b> @sSQL = <font color="#9933CC">'SELECT * FROM SETTBL WHERE RecID IN '</font> + @sIDList
    <b>EXEC</b>(@sSQL)
    <b>GO</b>
    <br>
    -- Stored Procedure testen
    <b>EXEC</b> CheckIDinSet <font color="#9933CC">'(1,3,5)'</font>
    </pre&gt

    Comment


    • #3
      Hallo,<BR><BR>mir ist noch etwas eingefallen wie es auch ohne die EXEC(...) Konstruktion funktioniert. Allerdings sollte dann sichergestellt sein, dass die zu übergebende Zeichenkette am Anfang und am Ende ein Komma enthält.<BR>Herr Kosch, hoffentlich haben Sie nichts dagegen wenn ich Ihren Quelltext von oben benutze....<pre>
      <b>USE</b> tempdb
      <b>GO</b>
      <br>
      <b>CREATE</b> <b>TABLE</b> SETTBL
      (
      RecID <b>INTEGER</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
      <b>Value</b> <b>VARCHAR</b>(9) <b>NOT</b> <b>NULL</b>
      )
      <b>GO</b>
      <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 1'</font>)
      <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 2'</font>)
      <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 3'</font>)
      <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 4'</font>)
      <b>INSERT</b> <b>INTO</b> SETTBL (<b>Value</b>) <b>VALUES</b> (<font color="#9933CC">'Test 5'</font>)
      <b>GO</b>
      <br>
      <b>CREATE</b> <b>PROCEDURE</b> CheckIDinSet
      (
      @sIDList <b>VARCHAR</b>(20)
      )
      <b>AS</b>
      SELECT * FROM SETTBL WHERE CHARINDEX(<font color="#9933CC">','</font> + CAST(RecID AS VARCHAR) + <font color="#9933CC">','</font>, @sIDList) > 0
      <b>GO</b>
      <br>
      -- Stored Procedure testen
      <b>EXEC</b> CheckIDinSet <font color="#9933CC">',1,3,5,'</font>
      </pre>Viele Grüße Ola

      Comment


      • #4
        Vielen Dank

        geht spitzenmässig.

        viele Grüsse

        Klau

        Comment

        Working...
        X