Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wyrażenie regularne do walidacji nazwy tabeli SQL Server

Wyrażenie regularne opisane w link powinno być:

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

Zauważ, że generalnie będziesz musiał osadzić nazwę tabeli w [...] , ze względu na regułę 3 (więc SELECT * FROM [SET] jest prawidłowym zapytaniem, ponieważ podczas gdy SET jest zastrzeżonym słowem kluczowym, możesz "ominąć" je za pomocą [...] )

Zwróć uwagę, że na stronie, do której prowadzi link, reguła jest niekompletna:

Od https://msdn.microsoft.com/en-us/library/ ms175874.aspx

  1. Identyfikator nie może być słowem zastrzeżonym języka Transact-SQL. SQL Server rezerwuje zarówno wielkie, jak i małe wersje słów zastrzeżonych. Gdy identyfikatory są używane w instrukcjach języka Transact-SQL, identyfikatory, które nie są zgodne z tymi regułami, muszą być oddzielone podwójnymi cudzysłowami lub nawiasami . Zarezerwowane słowa zależą od poziomu zgodności bazy danych. Ten poziom można ustawić za pomocą instrukcji ALTER DATABASE.

I zapomnieli:https://msdn.microsoft.com/en-us /biblioteka/ms174979.aspx

Reguła, którą napisałem, dotyczy „pełnych” tabel, a nie tabel tymczasowych i nie zawiera nazwy schematu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT ONE Row z wartością MAX() w kolumnie

  2. 4 wskazówki dotyczące uruchamiania diagnostyki SQL Server

  3. SQL Server zwraca błąd Logowanie nie powiodło się dla użytkownika 'NT AUTHORITY\ANONYMOUS LOGON'. w aplikacji Windows

  4. Jak utworzyć użytkownika w SQL-Server, który ma dostęp tylko do jednej tabeli i może wstawiać tylko wiersze?

  5. SqlDateTime.MinValue !=DateTime.MinValue, dlaczego?