2016-10-29 5 views
0

Ich habe ein seltsames Problem. Ich habe eine gespeicherte Prozedur, die intern eine andere Prozedur aufruft. Dies funktioniert seit einiger Zeit ohne Probleme. Wenn ich jetzt die interne gespeicherte Prozedur ändere und neu kompiliere, überspringt die externe Prozedur die interne Prozedur und wirft Fehler. Ich habe versucht, es zu debuggen und es geht nur über den internen Proc und nicht in es.geschachtelte gespeicherte Prozedur funktioniert nicht nach Neukompilierung

Die wirklich seltsame Sache ist jedoch, wenn ich dann den internen Proc selbst entweder über den Client ausführen, der Excel ist oder SMSS ist. Der externe Prozess wird dann korrekt starten. Ich habe versucht, WITH RECOMPILE zu den Prozeduraufrufen mit irgendeiner Änderung im Verhalten hinzuzufügen. Irgendwelche Ideen, was passiert?

+2

Können Sie erklären, mit einigen Beispielen – TheGameiswar

+0

ich zweite, was TheGameiswar sagte: fügen Sie die Umrisse des SP in Frage, und die Schritte erläutert, die in wenigen prägnanten kugel Punkten, so dass die Sequenz zu dem Problem führen aus Ereignisse sind klar. –

+0

Könnte der Schemaname Ihre wahrgenommenen versus tatsächlichen Ergebnisse beeinflussen? schemaA.InnerSp vs schemaB.InnerSp. Insgesamt klingt es wie ein Sicherheitsproblem in der Situation, in der Fehler geworfen werden. Wenn Sie SSMS oder Excel verwenden und es funktioniert, welcher Benutzer verwendet wird, wenn es fehlschlägt, welcher Benutzer verwendet wird. Nehmen Sie das mit rekompilieren heraus, um zu sehen, ob das das wirkliche Problem versteckt. –

Antwort

1

Dies kann passieren, wenn Sie Tabellen mit dem gleichen Namen in beiden Verfahren haben.

In diesem Fall benennen Sie sie um, um Kollisionen zu vermeiden. Ein Beispiel unten.

CREATE PROC P2 
AS 
SELECT 1 AS Y INTO #T 
SELECT Y FROM #T 

GO 

CREATE PROC P1 
AS 
SELECT 1 AS X INTO #T 
EXEC P2 

GO 

EXEC P2; /*Run P2 first so the plan is cached*/ 
EXEC P1; /*This executes fine*/ 

EXEC sp_recompile 'P2' /*Mark P2 for recompilation*/ 
EXEC P1 /* Attempt to recompile P2 fails with "Invalid column name 
      'Y' as a table called #T without this column already exists at outer scope."*/ 
+0

Danke Martin. Das ist genau das Problem. Ich werde mich darum kümmern. –

Verwandte Themen