2013-08-19 7 views
5

की अपेक्षा शुरू होने के करीब एक स्टोर प्रक्रिया बनाते हैं। यदि पहली बार तालिका मेरे डीबी में है तो मैं एक टेबल की जांच करता हूं, फिर मैं इसे छोड़ देता हूं और नई टेबल बना देता हूं, दूसरा मैं एसपी के भीतर एक स्टोर प्रक्रिया बनाता हूं जहां मैं तालिका में मूल्य डाल रहा हूं। मेरी समस्या यह है कि जब मैं स्टोर प्रक्रिया में स्टोर प्रक्रिया भाग जोड़ता हूं तो मुझे त्रुटि incorrect syntax near begin expecting 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 

धन्यवाद।

+0

आप '*' myProcedure' के भीतर से * updateroute_sp' बनाने का प्रयास कर रहे हैं? यदि ऐसा है, तो आपको गतिशील एसक्यूएल का उपयोग करना होगा, लेकिन मुझे सच में यकीन नहीं है कि आप एक प्रक्रिया के भीतर एक ऑफ ऑफ प्रक्रिया (एक टेबल और संग्रहित प्रो बनाने) को कैसे समाहित करने की कोशिश कर रहे हैं। यदि आप यह समझा सकते हैं कि आप ऐसा क्यों कर रहे हैं, तो हम कुछ बेहतर सुझाव देने में सक्षम हो सकते हैं। –

+0

@Damien_The_Unbeliever धन्यवाद मैं समझता हूँ कि यह इस सपा के तहत सपा बनाने के लिए अच्छा तार्किक नहीं है, लेकिन मेरे मुवक्किल इस चाहते हैं, क्योंकि मैं SQL सर्वर के Sybase से इस कोड को परिवर्तित कर रहा हूँ – Abhishek

उत्तर

2

कीवर्ड 'के रूप में' दो बार बैच 'गो' या द्वारा चिह्नित के अंत से पहले मौजूद है ';'।

एक स्ट्रिंग (गतिशील एसक्यूएल) में एसपी के निर्माण को समाहित करता है, फिर यदि आप किसी अन्य एसपी के साथ एक एसपी बनाना चाहते हैं तो उस स्ट्रिंग को EXEC (@SQL) के साथ निष्पादित करें।