ich für eine Abfrage/proceduer bin auf der Suche, die alle geben mir die dependecies eines Verfahrens (Ergebnisse ähnlich wie sp_depends)Eine Abfrage/Prozedur erhalten Prozedur dependecies sybase
Beispiel in Verfahren proc1, es auszuführen proc2, proc3, in Prozedur proc2, führen sie es xproc1, xproc2
so möchte ich meine Ausgabe wie
proc1 -> proc2 -> xproc1 ->xproc2
proc1 -> proc3
EDIT sein:
Ich habe das folgende Verfahren erstellt, aber das Problem über sie gab es mir die folgenden Fehler
------------------------ Execute ------------------------
Maximum stored procedure nesting level exceeded (limit 60). Please use sp_configure to increase the 'max nesting level'.
return status = -6
Auch die nach nach der Zählung auf dem Cursor zu begrenzen (Wenn Ihre Lese carefuly das Verfahren, werden Sie Zeigezahl, so dass ich änderte die Prozedur später, um anzugeben, wie viele Verschachtelungen ich habe, um den Fehler zu vermeiden, und ich vermied es) das Ergebnis fehlt, ich habe nicht die ganze Prozedurabhängigkeit bekommen, was ich sage, ich bekomme nicht alle Prozedurabhängigkeiten, aber ich habe Probleme mit dem Verfahren nach der Untersuchung und Überprüfung in syscomments
und Auswahl in Abhängigkeit sysdepends
scheint es Sybase doenst geben alle die Abhängigkeit. Ich weiß es nicht. Hast du einen Weg, der mir helfen kann, alle Abhängigkeiten zu bekommen?
CREATE TABLE dbo.PROC_HIERARCHY
(PROC_PATH VARCHAR(4000) NULL
)
GO
CREATE PROCEDURE dbo.PROC_DEP_REC
@PROC_ID INTEGER,
@PATH VARCHAR(4000) OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @CURR_ID INTEGER
DECLARE @CURR_NAME VARCHAR(40)
DECLARE @ROW_COUNT NUMERIC(12)
DECLARE @PATH_OUT VARCHAR(4000)
-- retrieve the children
DECLARE CURS CURSOR FOR
select distinct o2.name, o2.id
from sysdepends d
inner join sysobjects o
on d.id = o.id
inner join sysobjects o2
on d.depid = o2.id
where o.type = 'P'
and o2.type = 'P'
and o.id = @PROC_ID
OPEN CURS
FETCH CURS INTO @CURR_NAME, @CURR_ID
WHILE (@@SQLSTATUS <> 2)
BEGIN
SELECT @PATH_OUT = @PATH + @CURR_NAME + '/'
select @ROW_COUNT = COUNT(1)
from sysdepends d
inner join sysobjects o
on d.id = o.id
inner join sysobjects o2
on d.depid = o2.id
where o.type = 'P'
and o2.type = 'P'
and o.id = @CURR_ID
IF (@ROW_COUNT > 0)
EXEC PROC_DEP_REC @CURR_ID, @PATH_OUT OUTPUT
ELSE
BEGIN
IF (RIGHT(@PATH_OUT, 1) = '/')
SELECT @PATH_OUT = LEFT(@PATH_OUT, LEN(@PATH_OUT) - 1)
INSERT INTO PROC_HIERARCHY VALUES (@PATH_OUT)
END
FETCH CURS INTO @CURR_NAME, @CURR_ID
END
CLOSE CURS
DEALLOCATE CURS
IF (RIGHT(@PATH_OUT, 1) = '/')
SELECT @PATH = SUBSTRING(@PATH_OUT, 1, LEN(@PATH_OUT) - CHARINDEX('/', REVERSE(@PATH_OUT)))
END
GO
CREATE PROCEDURE dbo.PROC_DEP
AS
BEGIN
SET NOCOUNT ON
DECLARE @CURR_ID INTEGER
DECLARE @CURR_NAME VARCHAR(40)
DECLARE @PATH VARCHAR(4000)
DECLARE CURS CURSOR FOR
select distinct o.name, o.id
from sysdepends d
inner join sysobjects o
on d.id = o.id
inner join sysobjects o2
on d.depid = o2.id
where o.type = 'P'
and o2.type = 'P'
OPEN CURS
FETCH CURS INTO @CURR_NAME, @CURR_ID
WHILE (@@SQLSTATUS <> 2)
BEGIN
SELECT @PATH = @CURR_NAME + '/'
EXEC PROC_DEP_REC @CURR_ID, @PATH OUTPUT
FETCH CURS INTO @CURR_NAME, @CURR_ID
END
CLOSE CURS
DEALLOCATE CURS
SELECT DISTINCT *
FROM PROC_HIERARCHY
ORDER BY PROC_PATH
END
GO
danke für Ihr asnwer, bitte überprüfen Sie meine Bearbeitung – Moudiz
durch die Art und Weise konnte ich Skriptverzeichnis finden 'C: \ sybase \ ASE-15_0' – Moudiz
Das bedeutet wahrscheinlich, dass Ihr Installationsverzeichnis woanders ist. Es muss nicht c: \ sybase sein. Unter Windows wird dies durch% SYBASE% angezeigt – RobV