2009-07-19 24 views
1

Gibt es einen Namen für eine Syntax für SQL?Name der SQL-Syntaxnotation?

Z. B.) Wenn Sie gehen auf diese Seite auf BOL (SQL-Online),
es zeigt die Syntax von 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 } ] ] 
[ ; ] 

Was ist der Name/Terminologie der Syntax oben verwendet?

Transact-SQL Syntax Conventions (Transact-SQL) erwähnt nicht den Namen ihrer "Syntax Conventions".

Antwort

0

Ich stimme Liao zu.

Da ist mehr dran. Dies wird nicht nur für die SQL-Syntax verwendet, sondern auch zum Beschreiben/Definieren von grammars verschiedener künstlicher Sprachen (Programmiersprachen gehören auch hier).

0

Ich habe diese Art von Syntax Beschreibung für eine lange Zeit gesehen. Wenn Sie sich für antike Geschichte interessieren, werfen Sie einen Blick auf die TOPS-10/TOPS-20 COBOL-74 Language Manual (AA-5059B-TK).

0

Ich weiß nicht, ob diese Notation einen bestimmten Namen hat, aber es ist nicht BNF - Backus-Naur Form, noch ist es EBNF (erweiterte BNF, aka ISO/IEC 14977:1996). Es ist lose verwandt, aber nur lose verwandt. Insbesondere gibt BNF an, dass ein Nicht-Terminal-Name als eine Liste von Werten definiert ist. Ein example wäre diese TABLE-Anweisung aus dem SQL-2003-Standard CREATE:

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

Die LHS ('<table definition>') ist ein nicht-Terminal, das an anderer Stelle verwiesen werden kann. Der Operator '::=' ist der Operator 'ist definiert als'. Die Begriffe in spitzen Klammern '<>' sind mehr Nicht-Terminals (manchmal die gleichen wie die LHS, wenn auch nicht in diesem Beispiel), für die es irgendwo anders eine Definition gibt. Die Teile in eckigen Klammern '[ ... ]' sind optional (können entweder vorhanden sein - einmal - oder können ganz weggelassen werden). Der SQL-Standard verwendet die Notation:

, um Wiederholung anzuzeigen.

Das Snippet in der Frage ist nicht direkt BNF, weil es nicht die 'LHS :: = RHS' -Notation verwendet; es nimmt effektiv an, dass die LHS nicht benannt werden muss. Es ist auch nicht klar aus der Notation (wie gezeigt - es kann klarer im Originaldokument sein), ob Dinge wie 'CURRENT DATABASE' und 'target_server_name' Terminals oder Nicht-Terminals sind (höchstwahrscheinlich ist die aktuelle Datenbank ein Terminal und Ziel Server-Name ist nicht - aber BNF würde dies deutlich machen).

+0

-1: Jonathan, das ist nicht wirklich eine Antwort auf die Frage "wie heißt diese Syntax". –