SQL语法表示法的名称?

时间:2009-07-19 18:56:33

标签: sql tsql terminology

是否有用于SQL的语法的名称?

例如,当您在BOL(SQL Books OnLine)上转到此页面时,
它显示BEGIN DIALOG CONVERSION

的语法
BEGIN DIALOG [ CONVERSATION ] @dialog_handle
   FROM SERVICE initiator_service_name
   TO SERVICE 'target_service_name'
       [ , { 'service_broker_guid' | 'CURRENT DATABASE' } ] 
   [ ON CONTRACT contract_name ]
   [ WITH
   [  { RELATED_CONVERSATION = related_conversation_handle 
      | RELATED_CONVERSATION_GROUP = related_conversation_group_id } ] 
   [ [ , ] LIFETIME = dialog_lifetime ] 
   [ [ , ] ENCRYPTION = { ON | OFF }  ] ]
[ ; ]

上面使用的语法的名称/术语是什么?

Transact-SQL Syntax Conventions (Transact-SQL)未提及其“语法约定”的名称。

4 个答案:

答案 0 :(得分:1)

这是EBNF的一种非正式的,略微缩写的形式:

http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form

至少从60年代后期开始用于计算机语言文档。

答案 1 :(得分:0)

我同意廖。

还有更多内容。这不仅用于SQL语法,还用于描述/定义grammars各种人工语言(此处也包含编程语言)。

答案 2 :(得分:0)

我很长一段时间都看过这种语法描述。如果您对古代历史感兴趣,请查看TOPS-10/TOPS-20 COBOL-74 Language Manual(AA-5059B-TK)。

答案 3 :(得分:0)

我不知道这个符号是否有特定的名称,但它不是BNF - Backus-Naur Form,也不是EBNF(扩展BNF,又名ISO/IEC 14977:1996)。它松散相关,但只是松散相关。特别是,BNF指定将非终端名称定义为某些值列表。 example将是SQL 2003标准中的CREATE TABLE语句:

<table definition> ::=
     CREATE [ <table scope> ] TABLE <table name> <table contents source>
     [ ON COMMIT <table commit action> ROWS ] 

LHS('<table definition>')是一个非终端,可以在其他地方引用。 '::='运算符是'被定义为'运算符。尖括号“<>”中的术语更多是非终端(有时与LHS相同,但不在此示例中),在其他地方有定义。方括号“[ ... ]”中的部分是可选的(可以存在 - 一次 - 或者可以完全省略)。 SQL标准使用表示法:

<non-terminal> { [ , <non-terminal> ] }...

表示重复。

问题中的片段不是直接BNF,因为它不使用'LHS :: = RHS'表示法;它有效地假定LHS不需要命名。从符号(如图所示 - 在原始文档中可能更清楚)中还可以看出'CURRENT DATABASE''target_server_name'之类的东西是终端还是非终端(最有可能的是,当前数据库是终端和目标服务器名称不是 - 但BNF会明确说明。