L'expression régulière décrite dans le lien devrait être :
var regex = new Regex(@"^[\p{L}_][\p{L}\p{N}@$#_]{0,127}$");
Notez qu'en général vous devrez intégrer le nom de la table dans [...]
, à cause de la règle 3 (donc SELECT * FROM [SET]
est une requête valide, car, tandis que SET
est un mot-clé réservé, vous pouvez "l'échapper" avec le [...]
)
Notez que dans la page liée la règle est incomplète :
Depuis https://msdn.microsoft.com/en-us/library/ ms175874.aspx
- L'identifiant ne doit pas être un mot réservé Transact-SQL. SQL Server réserve à la fois les versions majuscules et minuscules des mots réservés. Lorsque des identifiants sont utilisés dans des instructions Transact-SQL, les identifiants qui ne respectent pas ces règles doivent être délimités par des guillemets doubles ou des crochets . Les mots réservés dépendent du niveau de compatibilité de la base de données. Ce niveau peut être défini à l'aide de l'instruction ALTER DATABASE.
Et ils ont oublié :https://msdn.microsoft.com/en-us /bibliothèque/ms174979.aspx
La règle que j'ai écrite concerne les tables "complètes", pas les tables temporaires, et n'inclut pas le nom du schéma.