当前位置: 首页 > 面试题库 >

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

狄玮
2023-03-14
问题内容

我需要验证以编程方式创建的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);

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


问题答案:

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

(对于那些不想单击的html" target="_blank">用户,HashSet为零)

http://theburningmonk.com/2011/03/hashset-vs-list-vs-
dictionary/



 类似资料:
  • 问题内容: 我刚刚s在以下lambda表达式中替换为_: Eclipse编译器说: ‘_’不应用作标识符,因为它是源级别1.8以后的保留关键字。 我没有在JLS§3.9词法结构/关键字中找到任何解释。 问题答案: 看的地方是JLS§15.27.1。Lambda参数 如果lambda参数具有名称_(即单个下划线字符),则是编译时错误。 不建议在任何上下文中使用变量名_。Java编程语言的未来版本可能

  • 保留字是 Python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行查看: >>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break',

  • ECMA-262 描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是 ECMAScript的全部关键字(带*号上标的是第 5 版新增的关键字): ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途,但它们有可能在将来被用作关键字。以下是 ECMA

  • 问题内容: 我有一些正在使用Gson反序列化的JSON。 我的问题是这是Java关键字,那么我该如何在类中创建与JSON中的字段相关的字段? 问题答案: 您可以使用gson的字段命名支持为字段使用其他名称。

  • 问题内容: 我想获取所有Pythons关键字作为字符串的列表。如果我可以为内置函数做类似的事情,那也将很漂亮。 像这样的东西: 问题答案: 您询问了有关 语句的信息 ,同时在输出示例中显示了 关键字 。 如果您在寻找 关键字 ,它们都列在模块中: 从文档: 包含为解释程序定义的所有关键字的序列。如果将任何关键字定义为仅在特定语句生效时才处于活动状态,则这些关键字也将包括在内。

  • 问题内容: 保留哪些JavaScript关键字(函数名称,变量等)? 问题答案: 其中包含JavaScript中所有保留的关键字,专门针对那些当下保持诚实,而不仅仅是尝试得分的人: