2009-07-19 71 views
1

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

例如)当你去这个页面上BOL(SQL联机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

我同意廖。

还有更多。这不仅用于SQL语法,而且还用于描述/定义各种人造语言(此处也属于此的编程语言)grammars

0

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

<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会明确表示)。

+0

-1:Jonathan,这不是真正的“这是什么语法叫”的问题的答案。 – 2009-07-19 20:44:30