2017-09-04 50 views
1

我遇到问题,我的Insert声明不起作用。我创建了临时表,然后插入语句基于这个临时表中的两列进行工作。插入光标无法使用

数据存在临时表中,但插入不工作,没有出现错误。在此先感谢

DECLARE JPCUSTOMER_CURSOR CURSOR FOR 
    SELECT 
     cu.CustomerNo, jp.ID 
    FROM 
     CUSTOMERNO# cu, SalesmanNo# sa, JourneyPlan JP 
    WHERE 
     cu.OCCURRENCE = sa.OCCURRENCE 
     AND jp.AssignedTO = sa.SalesmanNo 

OPEN JPCUSTOMER_CURSOR 

FETCH NEXT FROM JPCUSTOMER_CURSOR INTO @CUST_ID,@JP_ID 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 
    INSERT INTO [JPCustomer] ([CustomerID ], [JPID], [Frequency], [StartWeek], 
           [sat], [sun], [mon], [tue], [wed], [thu], [fri], 
           [VisitOrder], [ModifiedOn], [ModifiedBy], 
           [CreatedOn], [Createdby], 
           [RecordSource], [IsPotential]) 
    VALUES (@CUST_ID, @JP_ID, 4, 1, 
      1, 1, 1, 1, 1, 1, 1, 
      NULL, NULL, NULL, 
      NULL, NULL, 0, 0) 
END 

CLOSE JPCUSTOMER_CURSOR; 
DEALLOCATE JPCUSTOMER_CURSOR; 
+1

“INSERT”后面缺少'FETCH NEXT'。如果至少有一行是由游标查询返回的,我希望这段代码有一个无限循环。 –

+3

你不需要一个游标 –

+0

你有宣布'@ CUST_ID'和'@ JP_ID'吗?这将只需多次插入相同的行,您需要在末尾添加“下一个获取” – dbajtr

回答

2

你不需要光标你正在做什么。这将更快:

INSERT INTO [JPCustomer] ([CustomerID ], 
          [JPID], 
          [Frequency], 
          [StartWeek], 
          [sat], 
          [sun], 
          [mon], 
          [tue], 
          [wed], 
          [thu], 
          [fri], 
          [VisitOrder], 
          [ModifiedOn], 
          [ModifiedBy], 
          [CreatedOn], 
          [Createdby], 
          [RecordSource], 
          [IsPotential]) 
select cu.CustomerNo, 
     jp.ID, 
     4, 
     1, 
     1, 
     1, 
     1, 
     1, 
     1, 
     1, 
     1, 
     NULL, 
     NULL, 
     NULL, 
     NULL, 
     NULL, 
     0, 
     0 
from CUSTOMERNO# cu 
join SalesmanNo# sa on cu.OCCURRENCE = sa.OCCURRENCE 
join JourneyPlan JP on jp.AssignedTO = sa.SalesmanNo 
1

你不需要也不应该使用游标。只需一个INSERT ... SELECT。 EG

with q as 
(
    select cu.CustomerID CUST_ID, jp.ID JPID 
    from CUSTOMERNO# cu 
    join SalesmanNo# sa 
     on cu.OCCURRENCE = sa.OCCURRENCE 
    join JourneyPlan JP 
     on jp.AssignedTO = sa.SalesmanNo 

) 
INSERT INTO [JPCustomer] ([CustomerID], 
          [JPID], 
          [Frequency], 
          [StartWeek], 
          [sat], 
          [sun], 
          [mon], 
          [tue], 
          [wed], 
          [thu], 
          [fri], 
          [VisitOrder], 
          [ModifiedOn], 
          [ModifiedBy], 
          [CreatedOn], 
          [Createdby], 
          [RecordSource], 
          [IsPotential]) 
SELECT CustomerID, 
     JPID, 
     4, 
     1, 
     1, 
     1, 
     1, 
     1, 
     1, 
     1, 
     1, 
     NULL, 
     NULL, 
     NULL, 
     NULL, 
     NULL, 
     0, 
     0 
from q;