2009-07-19 66 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