是否有用于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)未提及其“语法约定”的名称。
答案 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会明确说明。