Achtung – Urheberrechtshinweis!
Die Artikel dieses Blogs stehen unter einer CREATIVE COMMONS LICENSE! Bitte beachten Sie die entsprechenden Hinweise auf http://creativecommons.org/licenses/by-sa/2.0/de/
Bei Fragen oder Anregungen wenden Sie sich bitte an blog {at} fourdragons(.)de
Um einen evtl. gefährlichen String zu testen, habe ich nachfolgend einen Schnelltest in Form einer Scalar-Funktion entwickelt.
Diese Funktion übernimmt einen potenziell gefährlichen String und prüft ihn auf die wichtigsten Merkmale.
- Es dürfen keine String-Hochkommas vorkommen die nicht paarig sind.
- Desweiteren sind DDL-Kommandowörter als potzenziell gefährlich einzustufen.
Wenn ein “Problem” gefunden wurde, wird eine Fehlermeldung ausgegeben. Im anderen Fall wird der Originalstring als Rückgabewert präsentiert.
Natürlich erhebt diese Funktion keinen Anspruch auf Vollständigkeit, jedoch ist sie gerade bei der Entwicklung generischer (metadatengesteuerter) Prozeduren für den schnellen Test gerade dieser Metatabellen sehr nützlich.
Mehr…
Achtung – Urheberrechtshinweis!
Die Artikel dieses Blogs stehen unter einer CREATIVE COMMONS LICENSE! Bitte beachten Sie die entsprechenden Hinweise auf http://creativecommons.org/licenses/by-sa/2.0/de/
Bei Fragen oder Anregungen wenden Sie sich bitte an blog {at} fourdragons(.)de
Die Case-Anweisung von T-SQL verhält sich sehr interessant (fehlerhaft?) bei Ausdrücken die in der einfachen Version des Statements in der Case-Expression angegeben werden.
Die einfache Syntax siehe wie folgt aus:
| 1 | CASE input_expression |
| 2 | WHEN when_expression THEN result_expression |
| 3 | [ ...n ] |
| 4 | [ |
| 5 | ELSE else_result_expression |
| 6 | ] |
| 7 | END |
Um das Problem zu demonstrieren, möchte ich einmal das folgende Statement zur Diskussion stellen:
| 01 | DECLARE @i INT |
| 02 | |
| 03 | SET @i = 0 |
| 04 | |
| 05 | WHILE @i<10 |
| 06 | BEGIN |
| 07 | PRINT |
| 08 | CASE CONVERT(INT,RAND()*5+1) |
| 09 | WHEN 1 THEN 10 |
| 10 | WHEN 2 THEN 20 |
| 11 | WHEN 3 THEN 30 |
| 12 | WHEN 4 THEN 40 |
| 13 | WHEN 5 THEN 50 |
| 14 | WHEN 6 THEN 60 |
| 15 | ELSE 0 |
| 16 | END |
| 17 | SET @i = @i + 1 |
| 18 | END |
Das CASE-Statement verwendet die Random-Funktion RAND().
Diese Funktion liefert Werte zwischen 0 und 1 zurück. Multipliziert man nun den Rückgabewert mit 5 sollten also bis dahin Zahlen zwischen 0 und 5 zurückgeliefert werden. Um 0-Werte auszuschließen wird abschließend noch 1 dazu addiert und der endgültige Wertebereich liegt zwischen 1 und 6.
Soweit so gut.
Mehr…