Tôi tạo một quy trình lưu trữ. Trong đó đầu tiên tôi kiểm tra một bảng nếu bảng là trong DB của tôi sau đó tôi thả nó và tạo ra bảng mới, thứ hai tôi tạo ra một thủ tục lưu trữ có trong SP nơi tôi đang chèn giá trị trong bảng. Vấn đề của tôi là khi tôi thêm một phần thủ tục lưu trữ trong thủ tục lưu trữ, tôi nhận được lỗi incorrect syntax near begin expecting EXTERNAL
. Dưới đây là thủ tục cửa hàng của tôi, bạn có thể vui lòng giúp tôi nơi tôi đang làm sai.cú pháp không chính xác gần bắt đầu mong đợi 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
Cảm ơn.
Bạn đang cố gắng tạo 'updateroute_sp' từ * trong *' myProcedure'? Nếu vậy, bạn sẽ phải sử dụng SQL động, nhưng tôi không thực sự chắc chắn lý do tại sao bạn đang cố gắng để đóng gói một quá trình off (tạo ra một bảng và proc lưu trữ) trong một thủ tục chính nó. Nếu bạn có thể giải thích tại sao bạn làm điều này, chúng tôi có thể đưa ra một số gợi ý tốt hơn. –
@Damien_The_Unbeliever Cảm ơn tôi hiểu điều này là hợp lý không tốt để tạo SP theo SP nhưng khách hàng của tôi muốn điều này bởi vì tôi đang chuyển đổi mã này từ Sybase sang SQL SERVER – Abhishek