mi sono imbattuto in un problema di compatibilità di oggi, come un cliente aggiornato da Windows XP a Windows 7.SQL Server: Perché dovrei aggiungere "; 1" alla fine di un nome di stored procedure?
L'(12 anni vecchio codice) sta chiamando una stored procedure di SQL Server chiamato
ai_nextid
Tranne che quando si chiama la stored procedure che sta usando il nome:
ai_nextid;1
Sì, con un ";1
" aggiunto. A quanto pare il driver di SQL Server in Windows 95, Windows 2000, Windows XP e Windows Vista, eventualmente, sono bene con questo specificamente aggiunto il suffisso. Ma il driver ODBC di SQL Server in Windows 7 è diverso, e causa l'errore:
General SQL Error.
[Microsoft][ODBC SQL Driver][SQL Server]Could not find stored procedure 'ai_nextid;1'.
[Microsoft][ODBC SQL Driver][SQL Server]Indicator variable requried but not supplied'.
Con errore nativo 2812.
Questo porta 4 domande:
- perché stavamo aggiungendo
;1
alla fine del nome della stored procedure? (Cosa vuol realizzare) - il motivo per cui è stato il driver di SQL Server ignorarlo?
- perché è stata apportata una modifica di interruzione in Windows 7?
- è documentato il cambiamento compatibilità di rottura?
Le ultime due domande sarebbero probabilmente le stesse, poiché se lo documentassero, lo giustificherebbero.
Questa è la sintassi per [numerati stored procedure] (http://jagbarcelo.blogspot.com/2006/09/numbered-stored-procedures-will-be.html). Le tue stored procedure sono effettivamente numerate o "1", forse è solo l'impostazione predefinita per la versione non numerata? –
Whaddayaknow. La stored procedure in realtà è dichiarata come 'CREATE PROCEDURE ai_nextid; 1 ...'. Chi lo sapeva? –
se usano tutti solo '; 1' si possono semplicemente scrivere tutte le procedure in un singolo file e quindi cercare sostituire'; 1' con una stringa vuota. Esegui lo script fie e fai la stessa ricerca/sostituzione nell'applicazione che chiama le stored procedure. –