O regex descrito no link deveria estar:
var regex = new Regex(@"^[\p{L}_][\p{L}\p{N}@$#_]{0,127}$");
Observe que, em geral, você terá que incorporar o nome da tabela em
[...]
, por causa da regra 3 (portanto SELECT * FROM [SET]
é uma consulta válida, porque, enquanto SET
é uma palavra-chave reservada, você pode "escapar" com o [...]
) Observe que na página vinculada a regra está incompleta:
De https://msdn.microsoft.com/en-us/library/ ms175874.aspx
- O identificador não deve ser uma palavra reservada Transact-SQL. O SQL Server reserva as versões maiúsculas e minúsculas das palavras reservadas. Quando identificadores são usados em instruções Transact-SQL, os identificadores que não obedecem a essas regras devem ser delimitados por aspas duplas ou colchetes . As palavras reservadas dependem do nível de compatibilidade do banco de dados. Esse nível pode ser definido usando a instrução ALTER DATABASE.
E eles esqueceram:https://msdn.microsoft.com/en-us /library/ms174979.aspx
A regra que escrevi é para tabelas "completas", não para tabelas temporárias e não inclui o nome do esquema.