3 Stimmen

MSSQL-Bezeichner (Parameter) in .NET oder regulärem Ausdruck validieren

In einem .NET-Projekt muss ich überprüfen, ob eine Zeichenfolge ein gültiger Microsoft SQL Server 2005-Parameterbezeichner ist.

Ejemplo: SELECT * FROM table WHERE column = @parameter

Gibt es eine Methode der Laufzeitklasse, um eine Zeichenkette als Parameter zu validieren, oder gibt es einen regulären Ausdruck, der die Regeln verifiziert? (siehe unten)

Aus der Dokumentation über Identifikatoren sollten die Parameter diesen allgemeinen Bezeichnerregeln entsprechen:

  1. Das erste Zeichen muss eines der folgenden sein: * Ein Buchstabe gemäß der Definition des Unicode-Standards 3.2. Die Unicode-Definition von Buchstaben umfasst Lateinische Zeichen von a bis z, von A bis Z, und auch Buchstaben Zeichen aus anderen Sprachen. * Der Unterstrich (_), das At-Zeichen (@), oder Zahlenzeichen (#).
    Bestimmte Symbole am Anfang eines Bezeichners haben in SQL Server eine besondere Bedeutung. A regulärer Bezeichner, der mit dem at-Zeichen beginnt, bezeichnet immer eine lokale Variable oder einen Parameter und kann nicht als Name eines anderen Objekttyps verwendet Objekts verwendet werden. Ein Bezeichner, der mit einem einem Zahlenzeichen beginnt, bezeichnet eine temporäre Tabelle oder Prozedur. Ein Bezeichner, der mit einem doppelten Zahlenzeichen (##) beginnt beginnt, kennzeichnet ein globales temporäres Objekt. Obwohl das Zahlenzeichen oder doppelte Nummernzeichen verwendet werden können, um Namen von anderen Objekttypen beginnen Objekten verwendet werden können, empfehlen wir dies nicht Praxis. Einige Transact-SQL-Funktionen haben Namen, die mit doppelten at Zeichen (@@) beginnen. Zur Vermeidung von Verwechslungen mit diesen Funktionen zu vermeiden, sollten Sie keine Namen verwenden, die mit @@ beginnen.
  2. Nachfolgende Zeichen können die folgenden sein: * Buchstaben gemäß der Definition in der Unicode-Norm 3.2. * Dezimalzahlen entweder aus Basic lateinischen oder anderen nationalen Skripten. * Das at-Zeichen, das Dollarzeichen ($), die Zahl Zeichen oder Unterstrich.
  3. Der Bezeichner darf kein reserviertes Transact-SQL-Wort sein. SQL Server reserviert sowohl den Großbuchstaben als auch den Kleinbuchstaben von reservierten Wörtern.
  4. Eingebettete Leer- oder Sonderzeichen sind nicht erlaubt.
  5. Zusätzliche Zeichen sind nicht erlaubt.

Bei der Verwendung von Bezeichnern in Transact-SQL-Anweisungen verwendet werden, werden die Bezeichner, die nicht den Regeln entsprechen Regeln entsprechen, müssen durch doppelte Anführungszeichen oder Klammern abgegrenzt werden.

Da ich nur Parameter validieren möchte, müssen die Bezeichner mit einem @-Zeichen beginnen und dürfen nicht abgegrenzt werden.

0 Stimmen

Versuchen Sie, SQL von einer Anwendung aus zu analysieren, oder wollen Sie die SQL-Anweisung anschließend ausführen?

7voto

Bart Verkoeijen Punkte 14455

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

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

Dies erzwingt:

  • Der Bezeichner beginnt immer mit @ und ist somit ein Parameter.
  • Kein @ an zweiter Stelle erlaubt, um Verwechslungen mit speziellen TSQL-Funktionen zu vermeiden.
  • Erlaubt nur Zeichen, die in den Regeln definiert sind.

0voto

Ich fand diesen Artikel über die Erstellung einer Funktion für die Auswertung von regulären Ausdrücken auf TSQL, intern verwendet VBScript, check it out aquí

Ein weiterer nützlicher Link, aber ich glaube, er erfordert eine Registrierung, aquí

Eine andere Idee könnte sein, @parameter als einen Sysname-Datentyp zu behandeln, ich weiß nicht, ob das hier passt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X