我需要验证以编程方式创建的 SQL 列的名称...
应该有 2 个验证规则:
- Name 不应是 C# 关键字
- 名称 不应是 SQL 关键字(SQL Server 2008 R2)
第一个规则的解决方案很好:
CSharpCodeProvider 类具有IsValidIdentifier 方法,这使得验证的实现变得容易。
(例如:
string myColumnName = "blabla";
var isValid = _cSharpCodeProvider.IsValidIdentifier(myColumnName);
)
第二条规则的解决方案有点冗长:
我发现进行谷歌搜索的唯一方法是从 MSDN - Reserved Keywords (Transact-SQL) SQL Server 2008 R2 中获取关键字
要构建一个将返回所有这些关键字的 string[] 属性...
(例如:
public static class SqlReservedKeywords {
public static string[] SqlServerReservedKeywords {
get { return SqlServerKeywords; }
}
private static readonly string[] SqlServerKeywords = new[] {
"ADD","EXISTS","PRECISION",
//. . .
"EXEC","PIVOT","WITH",
"EXECUTE","PLAN","WRITETEXT"
};
}
//外部代码
var isValid = SqlReservedKeywords.SqlServerReservedKeywords.Contains(myColumnName);
)
关于第二条验证规则的实现,你能给我一些建议吗? 这是一个好习惯吗? 也许它存在另一种实现方式,我没有通过谷歌搜索找到...
最佳答案
保留字是一个移动的目标。如果 dbms 不通过公共(public)接口(interface)公开它们,通常没有好的编程方式来访问它们。
如果您不想用方括号保护它们,您可能会合并在您当前使用的 SQL Server 版本中未保留但在某些 future 版本中保留的符号。
我认为您最好的选择是使用您的 dbms 提供的引用机制,因为它旨在处理这个问题。对于 SQL Server,这意味着方括号。
关于c# - 它是一种获取SQL关键字(保留字)的编程方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939731/