我正在尝试安排一个很长的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)
答案 0 :(得分:4)
正如您所提到的,我将使用存储过程,从作业中调用它。
您还有一个优势,即您可以更新代码但保持工作不受影响
答案 1 :(得分:1)
使其成为存储过程。除了存储过程之外,我永远不会有任何工作。你可以继续在程序中添加逻辑等,而不是弄乱工作......
答案 2 :(得分:1)
同意上述内容 - 明确将其置于存储过程中并从作业中调用它。
将所有代码放在存储过程中通常是一种好习惯。这允许您稍后通过名称轻松调用存储过程(例如,用于作业或DTS包)。
如果您必须创建调用相同存储过程的多个作业或DTS包,并且您需要对该存储过程进行更改,则只需进行一次更改。
如果您只是将代码复制到作业/ DTS包中,则需要进入每个作业以更新代码(如果需要进行任何更改)。