Ho creato una procedura di archiviazione. In cui per prima cosa controllo una tabella se la tabella è nel mio DB allora la lascio cadere e creo una nuova tabella, in secondo luogo creo una procedura di memorizzazione lì all'interno della SP dove sto inserendo il valore nella tabella. Il mio problema è che quando aggiungo la parte relativa alla procedura di archiviazione nella procedura di memorizzazione, ricevo l'errore incorrect syntax near begin expecting EXTERNAL
. Di seguito è riportata la procedura del mio negozio, per favore aiutami dove sto sbagliando.sintassi errata vicino in attesa EXTERNAL
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
Grazie.
Stai cercando di creare 'updateroute_sp' da * in *' myProcedure'? In tal caso, sarà necessario utilizzare SQL dinamico, ma non sono proprio sicuro del motivo per cui si sta tentando di incapsulare un processo singolo (creando una tabella e un processo memorizzato) all'interno di una procedura stessa. Se potresti spiegare perché lo stai facendo, potremmo essere in grado di offrire alcuni suggerimenti migliori. –
@Damien_The_Unbeliever Grazie capisco che questo non è logico per creare SP in SP, ma il mio client lo desidera perché sto convertendo questo codice da Sybase a SQL SERVER – Abhishek