sql >> Databasteknik >  >> RDS >> Sqlserver

Reguljärt uttryck för validering av SQL Server-tabellnamn

Det regex som beskrivs i länk bör vara:

var regex = new Regex(@"^[\p{L}_][\p{L}\p{N}@$#_]{0,127}$");

Observera att du generellt sett måste bädda in namnet på tabellen i [...] , på grund av regel 3 (så SELECT * FROM [SET] är en giltig fråga, eftersom, medan SET är ett reserverat nyckelord kan du "escape" det med [...] )

Observera att regeln på den länkade sidan är ofullständig:

Från https://msdn.microsoft.com/en-us/library/ ms175874.aspx

  1. Identifieraren får inte vara ett reserverat Transact-SQL-ord. SQL Server reserverar både versaler och gemener av reserverade ord. När identifierare används i Transact-SQL-satser, måste identifierarna som inte följer dessa regler avgränsas med dubbla citattecken eller parenteser . Orden som är reserverade beror på databaskompatibilitetsnivån. Denna nivå kan ställas in med hjälp av ALTER DATABASE-satsen.

Och de glömde:https://msdn.microsoft.com/en-us /library/ms174979.aspx

Regeln som jag har skrivit är för "fullständiga" tabeller, inte för temporära tabeller, och inkluderar inte schemanamn.




  1. Välja från en databas baserat på en lista med unika par

  2. SQL Server skapar tabell med klustrade index utan en primärnyckel

  3. Oracle 12c-servern kan inte nås från en fjärrdator med .Net-leverantören

  4. pg_stat_activity uppdateras inte inom en procedur eller transaktion