2009-04-22 11 views
3

In einem .NET-Projekt muss ich überprüfen, ob eine Zeichenfolge eine gültige Microsoft SQL Server 2005-Parameterkennung ist.Validieren Sie MSSQL-Bezeichner (Parameter) in .NET oder regulärem Ausdruck

Beispiel:SELECT * FROM table WHERE column = @parameter

Gibt es eine Laufzeitklasse Methode eine Zeichenfolge zur Validierung für einen Parameter ist, oder gibt es einen regulären Ausdruck, der die Regeln überprüft? (siehe unten)

From the documentation on identifiers, Parameter zu diesen allgemeinen Bezeichner Regeln befolgt werden:

  1. Das erste Zeichen eines der folgenden sein: * Ein Brief wie definiert durch den Unicode-Standard 3.2. Die Unicode-Definition von Buchstaben enthält lateinische Zeichen von a bis z, von A bis Z, und auch Buchstaben Zeichen aus anderen Sprachen. * Der Unterstrich (_), bei Zeichen (@) oder Nummernzeichen (#).
    Bestimmte Symbole am Anfang eines Bezeichners haben besondere Bedeutung in SQL Server. Eine reguläre Kennung, die mit beginnt Das at-Zeichen bezeichnet immer eine lokale Variable oder einen Parameter und kann nicht als Name eines anderen Typs von Objekt verwendet werden. Eine Kennung, die mit ein Nummernzeichen beginnt, bezeichnet eine temporäre Tabelle oder Prozedur. Ein Bezeichner, der beginnt mit doppelten Nummernzeichen (##) bezeichnet ein globales temporäres Objekt. Obwohl die Nummer Zeichen oder Doppel Nummer Zeichen Zeichen verwendet werden können, um die Namen anderer Arten von Objekte beginnen, empfehlen wir nicht diese Praxis. Einige Transact-SQL-Funktionen haben Namen, die mit Doppelzeichen bei Zeichen (@@) beginnen. Um Verwechslungen mit diese Funktionen zu vermeiden, sollten Sie keine Namen verwenden, die mit @@ beginnen.
  2. Nachfolgende Zeichen können Folgendes enthalten: * Buchstaben gemäß Definition im Unicode-Standard 3.2. * Dezimalzahlen von Basic Latein oder anderen nationalen Skripten. * Das at-Zeichen, Dollarzeichen ($), Nummer Zeichen, oder unterstreichen.
  3. Der Bezeichner darf kein reserviertes Transact-SQL-Wort sein. SQL Server reserviert die Großbuchstaben und Kleinbuchstaben Versionen reservierter Wörter.
  4. Eingebettete Leerzeichen oder Sonderzeichen sind nicht zulässig.
  5. Zusätzliche Zeichen sind nicht erlaubt.

Wenn Bezeichner in Transact-SQL-Anweisungen verwendet werden, die Kennungen, die durch doppelte Anführungszeichen oder Klammern werden begrenzt nicht mit diesen Regeln entsprechen müssen.

Da ich Parameter nur überprüfen möchten, Bezeichner muss mit einem @ -Zeichen beginnen, und nicht begrenzt werden muss.

+0

Versuchen Sie, SQL aus einer App zu analysieren, oder möchten Sie die SQL-Anweisung danach ausführen? – gbn

Antwort

6

Ich stolperte über die Unicode-Zeichenklassen, aber sobald ich herausfand, dass sie in .NET regulären Ausdrücken unterstützt werden, kam ich mit dem folgenden regulären meine Frage Ausdruck zu lösen:

@[\p{L}{\p{Nd}}$#_][\p{L}{\p{Nd}}@$#_]*

Dies erzwingt:

  • Identifier beginnt immer mit @, es ist ein Parameter zu machen.
  • Kein @ in der zweiten Position zulässig, um Verwechslungen mit speziellen TSQL-Funktionen zu vermeiden.
  • Erlaubt nur Zeichen wie in den Regeln definiert.
+0

+1, aber ich möchte darauf hinweisen, dass '@@ Bezeichner 'von diesem regulären Ausdruck nicht unterstützt werden. @BartVerkoeijen wies auf seine Argumentation hin, aber es sollte klar sein, dass selbst wenn sie für spezielle TSQL-Funktionen verwirrt sind, sie tatsächlich gültige Identifikatoren sind. Ein regulärer Ausdruck, der exakt der Spezifikation entspricht, wäre '@ [\ p {L} \ p {Nd} @ $ # _] +' – LunicLynx

0

ich diesen Artikel über das Erstellen einer Funktion zur Auswertung von regulären Ausdrücken auf TSQL gefunden, intern verwendet, VBScript, check it out here

Ein weiterer Link, den Sie nützlich finden kann, aber ich denke, es Registrierung benötigt, here

Eine andere Idee könnte @parameter als Sysname-Datentyp behandeln, weiß nicht, ob es hier passt

+0

Vielen Dank für Ihre Eingabe, aber ich möchte die Regeln auf der Clientseite (in diesem Fall ASP.NET) und nicht auf der Serverseite überprüfen. Es tut mir leid, wenn ich in diesem Teil unklar war. –

Verwandte Themen