2009-08-14 4 views
1

長いT-SQLスクリプトをスケジュールしようとしています。ただし、テキストボックスに貼り付けるとスクリプトが途切れてしまいます。私は、問題を探って、3200文字の制限があります。SQL 2000スケジュールされたジョブ最大文字

これを解決するにはどうすればよいですか?ストアドプロシージャを作成し、それをスケジュールされたジョブとして実行しますか?より良い選択肢がありますか?助けがあれば、ここにスクリプトがあります。

INSERT INTO CheltonCustomizations..SOBacklogAudits (SoNo, 
                 SoRev, 
                 SysItemNo, 
                 UserItemNo, 
                 Release, 
                 OrderDate, 
                 DueDate, 
                 PartNo, 
                 PartRev, 
                 OrderQty, 
                 ShippedQty, 
                 ShippedNotInvoicedQty, 
                 InvoicedQty, 
                 ProdCl, 
                 [Group], 
                 NetAmount, 
                 SorelsIdentityColumn, 
                 BacklogDate) 
       SELECT SOR.fsono, 
         SOM.fsorev, 
         SOR.fenumber, 
         SOR.finumber, 
         SOR.frelease, 
         SOM.[forderdate], 
         SOR.fduedate, 
         SOR.fpartno, 
         SOR.fpartrev, 
         SOR.forderqty, 
         SOR.fshipbook + SOR.fshipbuy + SOR.fshipmake, 
         COALESCE (
          DBO.GETSHIPPEDNOTINVOICEDQTY (
           SOR.fsono + SOR.finumber + SOR.frelease), 
          0), 
         SOR.finvqty, 
         SOI.fprodcl, 
         SOI.fgroup, 
         (SOR.forderqty - SOR.finvqty 
         - COALESCE (
           DBO.GETSHIPPEDNOTINVOICEDQTY (
           SOR.fsono + SOR.finumber + SOR.frelease), 
           0)) 
         * SOR.funetprice, 
         SOR.identity_column, 
         getdate() 
         --CONVERT (DATETIME, '02/09/2009') 
        FROM SORELS SOR 
         INNER JOIN SOITEM SOI 
         ON SOR.finvqty < 
           SOR.forderqty 
           - COALESCE (
            DBO.GETSHIPPEDNOTINVOICEDQTY (
             SOI.FSONO + SOR.finumber + SOR.frelease), 
            0) 
           - 0 
          AND SOR.finvqty < 
           SOR.forderqty 
           - COALESCE (
             DBO.GETSHIPPEDNOTINVOICEDQTY (
             SOR.fsono + SOI.FINUMBER + SOR.frelease), 
             0) 
           - 0 
          AND SOR.FSONO = COALESCE (SOI.FSONO, SOI.FSONO) 
          AND SOR.FINUMBER = SOI.FINUMBER 
         INNER JOIN SOMAST SOM 
         ON SOR.finvqty < 
           SOR.forderqty 
           - COALESCE (
            DBO.GETSHIPPEDNOTINVOICEDQTY (
             SOM.FSONO + SOR.finumber + SOR.frelease), 
            0) 
           - 0 
          AND SOR.FSONO = COALESCE (SOM.FSONO, SOM.FSONO) 
          AND SOI.FSONO = SOM.FSONO 
        WHERE SOM.FSTATUS = 'OPEN' AND FMASTERREL = COALESCE (0, 0) 
         AND SOM.forderdate >= 
           CONVERT (DATETIME, '01/01/2002') 
         AND SOR.forderqty > 
           0 + SOR.finvqty 
           + COALESCE (
            DBO.GETSHIPPEDNOTINVOICEDQTY(SOR.fsono 
                   + SOR.finumber 
                   + SOR.frelease), 
            0) 
         AND SOR.finvqty < 
           SOR.forderqty 
           - COALESCE (
            DBO.GETSHIPPEDNOTINVOICEDQTY(SOR.fsono 
                   + SOR.finumber 
                   + SOR.frelease), 
            0) 

答えて

4

前述のとおり、私はストアドプロシージャを使用し、そのジョブから呼び出します。

また、あなたは、コードを更新したが、それストアドプロシージャ作る手つかず

1

を仕事を残すことができるという利点があります。私はストアドプロシージャ以外の何かを実行することは決してありません。プロシージャにロジックなどを追加し続けても構いません。

1

上記に同意します - 間違いなく、それをストアドプロシージャに入れてジョブから呼び出します。

すべてのコードをストアドプロシージャに入れるのが一般的には良い習慣です。これにより、あとで名前でストアドプロシージャを簡単に呼び出すことができます(たとえば、ジョブまたはDTSパッケージで使用する場合)。

同じストアドプロシージャを呼び出す複数のジョブまたはDTSパッケージを作成しなければならず、そのストアドプロシージャを変更する必要があった場合は、変更を一度行う必要があります。

コードをjob/DTSパッケージにコピーしただけの場合は、変更が必要な場合は、コードを更新するために各ジョブに入る必要があります。

関連する問題