是否以编程方式获取SQL关键字(保留字)
我需要验证以编程方式创建的SQL列的 名称…
有两个验证规则:
- 该 名称 不应该是一个C#关键字
- 该 名称 不应该是一个SQL关键字 (SQL Server 2008 R2中)
第一条规则的解决方案很好:
该 CSharpCodeProvider 类有 IsValidIdentifier 方法,这使得验证的实现变得更加容易。
(前任:
string myColumnName = "blabla";
var isValid = _cSharpCodeProvider.IsValidIdentifier(myColumnName);
)
第二条规则的解决方案是冗长的一句:
我发现进行Google搜索的唯一方法是从MSDN中获取关键字-保留关键字(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);
)
您能为我提供有关第二验证规则实施的建议吗?这是一个好习惯吗?也许存在另一种我无法通过谷歌搜索发现的实现方式…
-
由于有一个可以调用C#的函数,所以真正的问题是如何对SQL保留字进行查找。您在此处实现查找的方式并不是最有效的C#。您应该使用HashSet-
快速未经测试的代码示例如下:public static class SqlReservedKeywords { public bool isReserved(string in) { return SqlServerKeywords.Contains(in.ToUpper()); } private static HashSet<string> SqlServerKeywords = new HashSet<string>(); static SqlReservedKeywords() { SqlServerKeywords.Add("ADD"); SqlServerKeywords.Add("EXISTS"); SqlServerKeywords.Add("PRECISION"); //. . . SqlServerKeywords.Add("EXEC"); SqlServerKeywords.Add("PIVOT"); SqlServerKeywords.Add("WITH"); SqlServerKeywords.Add("EXECUTE"); SqlServerKeywords.Add("PLAN"); SqlServerKeywords.Add("WRITETEXT"); } }
这是一篇不错的文章(由@theburningmonk撰写),显示了使用Contains时HashSet有多快
(对于那些不想单击的用户,HashSet为零)
http://theburningmonk.com/2011/03/hashset-vs-list-vs-
dictionary/