He creado una tabla testtable
dentro de la base de datos testbase
que tiene la siguiente estructura:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
que utilicé el Microsoft SQL Server 2008 Management Studio.
Creé un procedimiento almacenado de la testtable_pricesmaller
siguiente manera
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
y pueden ver los Procedimientos almacenados en Object Explorer
el Microsoft SQL Server Management Studio. (Se enumera en la siguiente estructura de árbol de la Object Explorer
)
Databases
+ testbase
+ Tables
+ dbo.testtable
+ Programmability
+ Stored Procedures
+ dbo.testtable_pricesmaller
Me resulta muy extraño cuando recibo el siguiente error:
Could not find the stored procedure 'dbo.testtable_pricesmaller'.
cuando ejecuto la siguiente instrucción SQL:
execute dbo.testtable_pricesmaller 50
¿Qué podría faltar?
USE
declaración pero me dio el error.Respuestas:
IntelliSense Refresh local Cache debería solucionarlo
fuente
No debería tener que reiniciar la base de datos después de agregar un nuevo procedimiento almacenado, aunque deberá actualizar su explorador de objetos para verlo allí.
La próxima vez que agregue un procedimiento almacenado, intente ejecutar la opción de ejecución con el botón derecho del explorador de objetos e ingrese sus parámetros y vea si se ejecuta. Si no se ejecuta, no estoy seguro de cuál es su problema. Si se ejecuta, podría ser algo simple, como SQL está intentando consultar desde la base de datos incorrecta.
fuente
Por fin sé por qué aparece el mensaje en MS SQL Server Management Studio.
MS SQL Server Management Studio requiere uno para reiniciarlo después de crear un procedimiento almacenado en él.
Después de reiniciar MS SQL Server Management Studio, ya no existe ese error.
(Extraño, ¿eso significa que cada vez que creo un procedimiento almacenado, tengo que reiniciarlo?)
fuente
Su comando de creación debería ser
falta
dbo.
antes del nombre del procedimiento. Siempre que cree un procedimiento, es una buena práctica definir explícitamente el usuario / esquema con el nombre de un procedimiento, es decir, el nombre del procedimiento debe tener firmas totalmente calificadas.Espero que esto ayude.
fuente
En SQL Server 2008, cuando inicia sesión con una cuenta de Windows, si no tiene el nivel de seguridad SYSADMIN, cuando crea un objeto sin especificar explícitamente el esquema, puede / lo creará en [DOMINIO \ nombre de usuario]. [ObjectName ] en lugar de [dbo]. [ObjectName] (creo que se solucionó en SQL Server 2012).
Me ocurrió este problema cuando reduje el nivel de seguridad de un usuario, y uno de los procedimientos que estaba ejecutando era soltar y recrear tablas sin un esquema, por lo que el resto del procedimiento se bloqueaba porque no podía acceder al objeto nuevamente . Resulta que las tablas ahora se crearon con su nombre de usuario de dominio.
Aquí está la publicación de Microsoft sobre este comportamiento:
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 (busque la sección "Esquema implícito y creación de usuarios")
La tabla no se crea bajo el esquema dbo
SQL 2008 R2 crea un usuario / esquema cuando el usuario de Windows crea tablas
Entonces, en resumen, es probable que tenga un problema en la base de datos (crea su tabla en una base de datos pero intenta acceder desde otra) o tiene el problema como acabo de describir.
fuente
Sé que esto es viejo; Encontré esta pregunta mientras buscaba una solución para este mismo problema, y estoy publicando esta respuesta con la esperanza de que ayude a otros que también encuentran esta pregunta.
En mi caso, recibí el mensaje de error al ejecutar un informe SSRS utilizando una fuente de datos compartida. Esta fuente de datos compartida no especificó una base de datos predeterminada (el Catálogo predeterminado = parámetro), y no pude agregarla a la cadena de conexión porque no tengo la contraseña (y cuando cambia algo en una fuente de datos SSRS tiende a querer que vuelva a ingresar la contraseña).
Para resolver esto, cambié la base de datos predeterminada para el inicio de sesión en la instancia de SQL Server de maestro a la base de datos que contiene el procedimiento almacenado que el informe quería ejecutar.
Al ejecutar cosas desde SSMS, tenga en cuenta que el panel del Explorador de objetos es una conexión, mientras que el editor que tenga es una conexión completamente diferente. Por lo tanto, es posible que vea los objetos para SQL01 en el Explorador de objetos, pero el código que está ejecutando en un editor se ejecutará contra SQL02: me he encontrado con este problema varias veces a lo largo de los años y después de muchas insultos y "¿Por qué no? ¿funciona?" Me di cuenta de mi error. Para el editor, busque en la esquina inferior derecha para ver a qué instancia y base de datos está conectado.
fuente
TL; DR: es posible que tenga un procedimiento almacenado que está llamando a otro procedimiento almacenado que no existe.
Tuve este problema y encontré una solución. Esto es lo que pasó. Creé un procedimiento almacenado:
Luego creé otro procedimiento almacenado que ejecutó el primero
Algún tiempo después, cambié el nombre
dbo.MyProc
adbo.MyProc2
. Después de cambiarle el nombre, cuando intenté llamardbo.MyProcCaller
, recibí este mensaje de error:Mi solución fue alterar mi segundo procedimiento almacenado para usar el nuevo nombre:
Aquí hay una manera simple de verificar si tiene este problema. Haga clic para modificar el texto del procedimiento almacenado y luego ejecute ese texto. Si recibe una advertencia como esta, debe cambiar el nombre de su procedimiento almacenado:
fuente
Esta pregunta tiene algunos años, pero solo quiero agregar otra posibilidad para cualquiera como yo que la haya encontrado más tarde.
Ejecuté este comando: EXEC SP_CONFIGURE 'Agent XPs'
Y se describe el error: Msg 2812, Nivel 16, Estado 62, Línea 1 No se pudo encontrar el procedimiento almacenado 'SP_CONFIGURE'.
Pero luego recordé que este servidor está configurado para distinguir entre mayúsculas y minúsculas. Entonces este comando funcionó bien: EXEC sp_configure 'Agent XPs'
HTH
fuente