SQL

是否以编程方式获取SQL关键字(保留字)

发布于 2021-05-10 21:16:47

我需要验证以编程方式创建的SQL列的 名称

有两个验证规则:

  1. 名称 不应该是一个C#关键字
  2. 名称 不应该是一个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);


您能为我提供有关第二验证规则实施的建议吗?这是一个好习惯吗?也许存在另一种我无法通过谷歌搜索发现的实现方式…

关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-05-10
    为面试而生,有面试问题,就找面试哥。

    由于有一个可以调用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/



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看