2009-05-13 28 views
17

Por lo tanto, no estoy seguro de lo que está sucediendo. Pero tengo el procedimiento almacenado y sigue desapareciendo de mi base de datos en SQL 2k.Desaparición del procedimiento almacenado

Puedo agregarlo de nuevo y luego intentar ejecutarlo desde mi aplicación web y me sale una excepción diciendo que el procedimiento almacenado no se puede encontrar. Entonces, ¿volveré a la administración y actualizaré y se irá otra vez?

aquí es la configuración para el procedimiento almacenado:

set ANSI_NULLS OFF 
set QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[USP_Equipment_Delete] 
    @EquipmentID int 
AS 

DELETE FROM [dbo].[Equipment] 
WHERE 
    [EquipmentID] = @EquipmentID 

Ninguno de mi otro procedimiento almacenado desaparecer. Este es el único. Tengo 100 fácilmente allí. Todos usan la misma clase SQLHelper. ¡¡Este sigue desapareciendo !!! ??

¡Se agradece cualquier ayuda o sugerencia!

¡Muchas gracias!

+3

¿Ha comprobado los registros de su servidor SQL o ha intentado ejecutar el generador de perfiles de SQL Server? –

Respuesta

34

Usted estaba creando este u otro proceso almacenado y al final de su código, tal vez después de un comentario, donde no lo vio, tiene una gota de este proceso.

Tome un vistazo a su base de datos usando:

select syo.name 
from syscomments syc 
    join sysobjects syo on 
     syo.id = syc.id 
where syc.[text] like '%DROP PROC%' 
+1

He solucionado la selección. Ejecútalo y mira. Lo que sucede es que creas proc 'b', pero en la ventana de consulta en la parte inferior tienes una gota de este proceso. Esa caída ocurre cada vez que se ejecuta proc 'b'. – Peter

+0

+1 La consulta básicamente busca un procedimiento almacenado que contiene una instrucción DROP. Gran idea, ejecútalo! – Andomar

+0

¡DUDE gracias! ¡¡¡¡eso funciono!!!! Tenía un procedimiento de caída en él. Me ayudaste mucho. Voy a actualizar eso y veremos qué pasa ahora. ¡MUCHAS GRACIAS! – Gabe

2

¿Tiene un PROCEDIMIENTO DE CREAR en cualquier lugar? No se puede ALTERAR un procedimiento si no existe.

+0

Sí, lo he creado con la siguiente ... CREAR PROCEDIMIENTO [dbo] .USP_Equipment_Delete \t @EquipmentID int AS CANCELACIÓN de [dbo]. [Equipo] DONDE \t [EquipmentID] = @EquipmentID IR SET QUOTED_IDENTIFIER OFF GO ANSI_NULLS SET en GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO – Gabe

+0

de anothe r pensamiento ... ¿tiene algo en las secuencias de comandos de su base de datos que descarta un procedimiento antes de crearlo? Y si es así, ¿es ese trozo de código en uno de sus otros procedimientos almacenados que abandona este procedimiento? –

2

Quizás el código para acceder al procedimiento almacenado esté utilizando un contexto diferente que no sea dbo. Asegúrese de agregar dbo.USP_Equipment_Delete al código que lo usa.

3

¿Estás using en la base de datos correcta?

Trate

using [database name]

antes de ejecutar el procedimiento almacenado, sólo para asegurarse.

0

Compruebe si el "Catálogo inicial" en su cadena de conexión está configurado en la base de datos correcta.

Ponga la base de datos en modo de usuario único (y asegúrese de que es el único usuario) y verifique si el procedimiento aún desaparece cada hora?

+0

La cadena inicial es correcta. La base de datos es la correcta. Cuando ingreso al Enterprise Manager y navego por los procedimientos almacenados, me falta. Luego lo agrego de nuevo. En no menos de una hora, me actualizo y se ha ido otra vez. – Gabe

+1

¿Hiciste un comentario sarcástico sobre la esposa del administrador del sistema recientemente? :) – Andomar

+0

hahaahahahahahaha clásico – Gabe

0

Quizás hay un trabajo que restaura una copia de seguridad antigua periódicamente?

+0

mal comprobar eso, no creo que eso esté sucediendo porque también mataría a mis otras adiciones. déjame verificar que aunque – Gabe

+0

NO hay trabajos en ejecución para restaurar ... – Gabe

-1

Si está ahí, entonces esta consulta debe devolver un registro:

SELECT * FROM sysobjects 
WHERE id = OBJECT_ID('USP_Equipment_Delete') 
     AND OBJECTPROPERTY(id, N'IsProcedure') = 1 
+1

-1 Esto busca para objetos llamados 'USP_Equipment_delete'; ¿Que bien hará? – Andomar

+0

busca identificaciones, no nombres: un objeto con una ID es igual a la ID del procedimiento almacenado USP_Equiment_Delete – eKek0

+0

¿lee id = OBJECT_ID ('USP_Equipment_Delete')? – eKek0

12

que tenía el mismo problema y acabo fijo que:

En el archivo de script faltaba la instrucción "IR" entre el final del procedimiento almacenado y el comienzo de la siguiente instrucción "SI EXISTE LUEGO CAÍDA".

Entonces, lo que sucedió fue que la declaración de gota se adjuntaba al final de cualquier procedimiento almacenado que estaba sobre ella en el script. Entonces, cuando el software ejecutó el procedimiento almacenado, descartaría cualquier procedimiento almacenado que estuviera debajo del script.

Parece tan obvio para nosotros ahora, pero no tenía ningún sentido en ese momento.Lo encontramos ejecutando el generador de perfiles SQL contra la base de datos de un cliente que tenía el problema en el campo.

+0

Lo mismo conmigo ................. – rball

+0

Hijo de puta. Sí, encontré el proceso con el GO que faltaba. Saludos :) – Jamsi

0

Estaba enfrentando el problema de que todos los procedimientos almacenados con una declaración de creación desaparecieron de la base de datos después de la ejecución.

La solución fue: El usuario de la base de datos debe tener los derechos de descartar, crear y modificar en la base de datos en la que se crearán los "Procedimientos almacenados".

Cuestiones relacionadas