2010-10-29 11 views
32

Stavo scrivendo una query su una tabella oggi su una casella di SQL Server 2000 e mentre scrivevo la query in Query Analyzer, con mia sorpresa ho notato che la parola LineNo è stata convertita in testo blu.Che cosa fa esattamente la parola riservata "LineNo" di T-SQL?

sembra essere un reserved word in base alla documentazione MSDN, ma non possono trovare alcuna informazione su di esso, solo speculazione che potrebbe essere una parola riservata eredità che non si fare nulla.

Non ho problemi a sfuggire al nome del campo, ma sono curioso - qualcuno sa che cosa "LineNo" in T-SQL è effettivamente utilizzato?

risposta

63

OK, questo è completamente non documentato, e ho dovuto capirlo per tentativi ed errori, ma imposta il numero di riga per la segnalazione degli errori. Per esempio:

LINENO 25 

SELECT * FROM NON_EXISTENT_TABLE 

È possibile che questo vi darà un messaggio di errore, che indica un errore alla linea 27 (invece di 3, se si converte la linea LINENO a un commento singola linea (ad esempio, dal prefisso con due trattini)):

Msg 208, Level 16, State 1, Line 27 
Invalid object name 'NON_EXISTENT_TABLE'. 

Questo è legato a meccanismi simili in linguaggi di programmazione, come ad esempio le direttive di lino preprocessore in Visual C++ e Visual C# (che sono documentate, tra l'altro).

Com'è possibile, si può chiedere? Bene, un uso di questo per aiutare i generatori di codice SQL che generano codice da un linguaggio di livello superiore (rispetto a SQL) e/o eseguire l'espansione macro, legano le code line generate alle code line dell'utente.

P.S., Non è una buona idea affidarsi a funzionalità non documentate, specialmente quando si ha a che fare con un database.

Aggiornamento: questa spiegazione è ancora corretta fino alla versione corrente di SQL Server, che al momento della stesura di questo documento è SQL Server 2008 R2 Aggiornamento cumulativo 5 (10.50.1753.0).

+7

Questo è fantastico - vorrei darti 2 più upvotes per una "bella risposta" se potessi. A ** vorrei ** far notare che non funziona in Query Analyzer stesso, ma funziona esattamente come descritto in una stored procedure. Dobbiamo utilizzare questa funzione solo per il bene e non per l'avvitamento con gli amministratori di database ... – LittleBobbyTables

+8

Non avvitiamoci con i DBA :-) Il messaggio 208, livello 16, stato 1, riga 2792874 –

+3

funziona ancora in SQL 2012 :-) – Bridge

Problemi correlati