me encontré con un problema de compatibilidad de hoy, como un cliente actualizado desde Windows XP a Windows 7.SQL Server: ¿Por qué debería agregar "; 1" al final de un nombre de procedimiento almacenado?
El (código 12 años de edad) está llamando a un procedimiento almacenado en el servidor SQL Server llama
ai_nextid
Excepto que cuando se llama al procedimiento almacenado que está utilizando el nombre:
ai_nextid;1
Sí, con un ";1
" adjuntas. Al parecer, el controlador de SQL Server en Windows 95, Windows 2000, Windows XP y posiblemente Windows Vista están bien con este específicamente sufijo agregado. Sin embargo, el controlador de SQL Server en Windows 7 es diferente, y provoca el error:
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 error nativo 2812.
Esto nos lleva a 4 preguntas:
- por qué nos anexar
;1
al final del nombre del procedimiento almacenado? (¿Qué logra) - ¿por qué el controlador de SQL Server lo ignoraba?
- ¿por qué se hizo un cambio radical en Windows 7?
- ¿Está documentado el cambio de compatibilidad de última hora?
Las dos últimas preguntas probablemente serían las mismas, ya que si lo documentan, lo justificarían.
Esa es la sintaxis para [numerada procedimientos almacenados] (http://jagbarcelo.blogspot.com/2006/09/numbered-stored-procedures-will-be.html). ¿Sus procedimientos almacenados están realmente numerados o '' 1 '' tal vez simplemente de manera predeterminada a la versión no numerada? –
Whaddayaknow. El procedimiento almacenado en realidad se declara como 'CREATE PROCEDURE ai_nextid; 1 ...'. ¿Quien sabe? –
si todos solo usan '; 1', usted puede simplemente escribir todos los procedimientos en un solo archivo y luego buscar reemplazar'; 1' con una cadena vacía. Ejecute esa secuencia de comandos y realice la misma búsqueda/reemplazo en la aplicación que llama a los procedimientos almacenados. –