2011-08-04 10 views
40

आमतौर पर SQL Server आम तालिका अभिव्यक्ति खंड में वहाँ इस तरह के बयान के सामने अर्धविराम है,:आम टेबल अभिव्यक्ति, अर्धविराम क्यों?

;WITH OrderedOrders AS --semicolon here 
(
    SELECT SalesOrderID, OrderDate, 
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' 
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60 

क्यों?

उत्तर

61
  • अस्पष्टता से बचने के लिए, क्योंकि के साथ कहीं और इस्तेमाल किया जा सकता
    ..FROM..WITH (NOLOCK)..
    RESTORE..WITH MOVE..
  • यह एसक्यूएल सर्वर में ; साथ बयान समाप्त करने के लिए वैकल्पिक है

एकत्र किया गया, पिछले बयान एक से पहले समाप्त किया जाना चाहिए साथ/CTE। त्रुटि न हो, सबसे लोक ;WITH उपयोग करें, क्योंकि हम नहीं जानते कि क्या पहले CTE

तो

DECLARE @foo int; 

WITH OrderedOrders AS 
(
    SELECT SalesOrderID, OrderDate, 
...; 

मर्ज आदेश एक समान आवश्यकता है एक ही

रूप
DECLARE @foo int 

;WITH OrderedOrders AS 
(
    SELECT SalesOrderID, OrderDate, 
...; 

है।

+0

एक त्वरित और संक्षिप्त उत्तर, बहुत अच्छा। मेरा मुझे आधा दिन लंबा या आधा मील पेज ले जाएगा (थोड़ा अतिरंजित, लेकिन बहुत ज्यादा नहीं)। दूसरी भाषा के रूप में अंग्रेजी बोलने के 'लाभ' ... –

+6

नए संस्करणों के लिए - 'SQL सर्वर दस्तावेज़ इंगित करता है कि अर्धविराम के साथ टी-एसक्यूएल स्टेटमेंट को समाप्त नहीं करना एक बहिष्कृत सुविधा है। इसका मतलब है कि दीर्घकालिक लक्ष्य उत्पाद के भविष्य के संस्करण में अर्धविराम के उपयोग को लागू करना है। '-' माइक्रोसॉफ्ट एसक्यूएल सर्वर 2012 टी-एसक्यूएल बुनियादी सिद्धांत इट्ज़िक बेन-गण द्वारा। – gotqn

संबंधित मुद्दे