[SQL]Frage mit Rand()

iSuicdeBomber

Grünschnabel
Hallo Leute,
Ich habe in SQL im Bereich Funktionen >>> Rand() <<< eine Frage!
Ich habe einen Random geschrieben im Bereich von 1-16

Hier meine Funktion:
-------------------------------------------------------
SET @bLevel = 17 /* upgrade +18 */
SET @Lower = 1 /* the minimus color*/
SET @Upper = 16 /* the maximus color*/
SET @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)

---------------------------------------------------------

Ich möchte jedoch die folgenden Zahlen auslassen: 12,13,14,15
Gibt es da eine Möglichkeit oder muss ich das anders machen?

Meine Komplette Funktion:
------------------------------------------------------------------------------------------------------------------
ALTER PROCEDURE [dbo].[RandomColor]


@dwCharID INT


AS
BEGIN

DECLARE @Random INT
DECLARE @Upper INT
DECLARE @Lower INT
DECLARE @bClass TINYINT
DECLARE @bLevel INT


SET @bLevel = 17 /* upgrade +18 */
SET @Lower = 1 /* the minimus color*/
SET @Upper = 16 /* the maximus color*/
SET @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)


SELECT @bClass = bClass FROM TCHARTABLE WHERE dwCharID = @dwCharID


IF(@bClass <= 2)/* Warrior,Archer,Assassin*/
BEGIN

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 0 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 1 AND dwStorageID = 254


UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 2 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 3 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 5 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 6 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 7 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 8 AND dwStorageID = 254

END

IF(@bClass >= 3)/* Priest,Mage,Summoner*/
BEGIN




UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 0 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 3 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 5 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 6 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 7 AND dwStorageID = 254

UPDATE TITEMTABLE SET bLevel = @bLevel, bGradeEffect = @Random WHERE dwOwnerID = @dwCharID AND bItemID = 8 AND dwStorageID = 254

END

END


------------------------------------------------------------------------------------------------------------------

Ich hoffe auf schnelle Hilfe, und bedanke mich schon im Vorraus !
mfg,
Julian
 
Screen: http://prntscr.com/5bs54a
Was mag er da nich?
-------------------------------
DECLARE @Random INT
DECLARE @Upper INT
DECLARE @Lower INT
DECLARE @bClass TINYINT
DECLARE @bLevel INT


SET @bLevel = 17 /* upgrade +18 */

SET @bLevel = 17 /* upgrade +18 */
SET @Lower = 1 /* the minimus color*/
SET @Upper = 16 /* the maximus color*/

REPEAT
SET @Random = FLOOR( 1 + RAND() * 16 )
UNTIL @Random < 12 OR random > 15
END REPEAT
 
Aha. Du hast nicht mysql sondern MS SQL. Wäre gut wenn man das jeweils im Threadtitel erwähnen würde.
REPEAT UNITL ist ein mysql Konstrukt. MS SQL kennt das nicht. Da musst du es mit einem WHILE loop lösen.
 
Zurück