Ich erstelle eine Speicherprozedur. In dem ersten prüfe ich eine Tabelle, wenn die Tabelle in meiner Datenbank ist, dann lasse ich sie fallen und erstelle eine neue Tabelle. Zweitens erstelle ich eine Speicherprozedur dort innerhalb des SP, wo ich einen Wert in die Tabelle einfüge. Mein Problem ist, dass ich Fehler incorrect syntax near begin expecting EXTERNAL
bekomme, wenn ich Speicherprozedurteil in der Speicherprozedur hinzufüge. Unten ist meine Ladenprozedur können Sie mir bitte helfen, wo ich falsch mache.falsche Syntax in der Nähe von Anfang erwartet EXTERN
ALTER PROCEDURE myProcedure
AS
BEGIN
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ATSROUTES]') AND type in (N'U'))
DROP TABLE [dbo].[ATSROUTES]
CREATE TABLE [ATSROUTES](
[zip] [varchar](255) NULL,
[route] [varchar](255) NULL,
[drivernum] [varchar](255) NULL,
[altserviceid] [varchar](255) NULL,
[localorldrvnum] [varchar](255) NULL,
[pickupzone] [varchar](255) NULL,
[distcenter] [varchar](255) NULL,
[altdispid] [varchar](255) NULL,
[id] [int] NULL);
BULK INSERT ATSROUTES FROM 'C:\Routes\my1.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[updateroute_sp]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].updateroute_sp
CREATE procedure updateroute_sp
AS
BEGIN
DECLARE @route varchar(255)
DECLARE @zip varchar(255)
DECLARE @routeid varchar(255)
DECLARE @distcenter varchar(255)
DECLARE @altdispid varchar(255)
DECLARE @ERR_NOTFOUND varchar(2000)
DECLARE db_Cursor CURSOR FOR SELECT zip, [route] from ATSROUTES
OPEN db_Cursor
FETCH NEXT FROM db_Cursor INTO @zip,@route
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@route is not null and @route <> '')
BEGIN
IF NOT EXISTS (SELECT * FROM routenames WHERE routename = @ROUTE)
BEGIN
EXEC GETNEWRECID2 'ROUTENAMES','ROUTEID','ROUTENAMES',@ROUTEID
insert into routenames (routeid,routename) values (@routeid,@ROUTE);
END
END
FETCH NEXT FROM db_Cursor INTO @zip,@route
END
CLOSE db_Cursor
DEALLOCATE db_Cursor
END
EXEC updateroute_sp
DROP PROCEDURE updateroute_sp
UPDATE ATSROUTES set id = (select routeid from routenames where routename = [route]);
UPDATE ATSROUTES set drivernum =LTRIM(RTRIM(drivernum));
END
Danke.
Versuchen Sie, 'updateroute_sp' von * in *' myProcedure' zu erstellen? Wenn dies der Fall ist, müssen Sie dynamisches SQL verwenden, aber ich bin nicht wirklich sicher, warum Sie versuchen, einen einmaligen Prozess (Erstellen einer Tabelle und eines gespeicherten Proc) in einer Prozedur selbst einzukapseln. Wenn Sie erklären könnten, warum Sie das tun, können wir Ihnen vielleicht bessere Vorschläge machen. –
@Damien_The_Unbeliever Dank ich verstehe das ist logisch nicht gut, um SP unter SP zu erstellen, aber mein Client möchte dies, weil ich diesen Code von Sybase zu SQL Server konvertieren – Abhishek