SQL 2000计划作业最大字符

时间:2009-08-14 18:28:14

标签: sql-server tsql scheduled-tasks

我正在尝试安排一个很长的T-SQL脚本。但是,当粘贴到文本框中时,脚本会被切断。我用Google搜索了问题,并且有3200个字符的限制。

你建议我做什么来解决这个问题?创建存储过程并将其作为计划作业运行?有更好的选择吗?如果有帮助,这是脚本。

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)

3 个答案:

答案 0 :(得分:4)

正如您所提到的,我将使用存储过程,从作业中调用它。

您还有一个优势,即您可以更新代码但保持工作不受影响

答案 1 :(得分:1)

使其成为存储过程。除了存储过程之外,我永远不会有任何工作。你可以继续在程序中添加逻辑等,而不是弄乱工作......

答案 2 :(得分:1)

同意上述内容 - 明确将其置于存储过程中并从作业中调用它。

将所有代码放在存储过程中通常是一种好习惯。这允许您稍后通过名称轻松调用存储过程(例如,用于作业或DTS包)。

如果您必须创建调用相同存储过程的多个作业或DTS包,并且您需要对该存储过程进行更改,则只需进行一次更改。

如果您只是将代码复制到作业/ DTS包中,则需要进入每个作业以更新代码(如果需要进行任何更改)。