Announcement

Collapse
No announcement yet.

Problem mit Stored Procedure

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

  • Problem mit Stored Procedure

    Hallo

    Meine Stored Procedure hier für SQL-Server 2000 scheint einen endlos-Loop zu machen, jedenfalls meldet mein C#-Programm per Exception einen TimeOut.

    Ich probiere darin folgendes:

    Es wird solange eine fünfstellige Zufallszahl (im Bereich 10'000 bis 99'999) probiert bis eine "gewürfelt" wurde, zu der es noch keinen Record gibt.

    In C# funktioniert das problemlos:

    <pre>
    private int GetID()
    {
    System.Data.SqlClient.SqlCommand cmdInternal;
    string s = "select count(ZrNr) from Zentralregister where ZrNr = @ZrNr";
    cmdInternal = new System.Data.SqlClient.SqlCommand(s, base.Connection);
    // Wenn eine Transaktion vorhanden ist, wird diese genutzt
    if (base.Transaction != null)
    cmdInternal.Transaction = base.Transaction;
    cmdInternal.Parameters.Add("@ZrNr", System.Data.SqlDbType.Int, 4, "ZrNr");
    Random random;
    random = new Random();
    bool unique = false;
    int i = 0;
    int j;
    while (unique != true)
    {
    i = random.Next(10000, 100000);
    cmdInternal.Parameters[0].Value = i;
    j = (int)cmdInternal.ExecuteScalar();
    if (j == 0)
    unique = true;
    }
    return i;
    }
    </pre>

    für die Stored Procedure habe ich folgendes probiert:

    <pre>
    CREATE PROCEDURE RandomTest
    AS
    declare @ZrNr int

    select @ZrNr = rand(10) * 100000
    while exists
    (select ZrNr
    from Zentralregister
    where ZrNr = @ZrNr and MUser is Null and IUser is Null)
    select @ZrNr = rand(10) * 100000

    return @ZrNr
    GO
    </pre>

    Ich denke, es liegt daran, dass der Lümmel immer die gleiche Zahl zurückliefert :-/

  • #2
    Tja, rand(10) initialisiert die Random-Funktion und das tust du (wohl unabsichtlich) auch innerhalb der while-Schleife. Damit ist der Wert immer der gleiche ... <br>
    Also einfach nur ... select @ZrNr = rand() * 100000 ... und es sollte sich was tun :-))

    bye,
    Helmu

    Comment

    Working...
    X