0

我需要一些有关 SQL Server 游标的帮助:

Declare @DCursor cursor, @OldIndividualID uniqueIdentifier, 
        @NewIndividualID UniqueIdentifier, @NewUniqueColID uniqueIdentifier

Set @DCursor = Cursor For
     Select IndividualID From [MVCOmar2].[dbo].PrideMVCDriver 
     Where UniqueColID='895AE0DE-D2CF-461E-ADA9-14FB8BB59640'
        Set @NewUniqueColID=NEWID()
Open @DCursor
Fetch Next From @DCursor Into @OldIndividualID
While (@@FETCH_STATUS = 0)
Begin
    Set @NewIndividualID=NEWID()
    INSERT INTO [MVCOmar2].[dbo].[PrideMVCCollisionDiagram] ([IndividualID], [ColDiagram],
       [dateEntered]      ,[OfficerID]      ,[UniqueColID]      ,[ESDEditDiagram]) 
    SELECT @NewIndividualID,[ColDiagram]      ,[dateEntered]      ,[OfficerID]      ,
        @NewUniqueColID      ,[ESDEditDiagram] 
        FROM [MVCOmar2].[dbo].[PrideMVCCollisionDiagram] 
       WHERE  [IndividualID]=@OldIndividualID;

    Fetch Next From @DCursor Into @OldIndividualID
End

Close @DCursor
Deallocate @DCursor

我有上面的代码并且该Select语句工作正常,它返回 2 行,但由于某些奇怪的原因,游标无法正常工作,这意味着插入语句没有插入任何没有意义的东西,因为各个 id 应该存在。该 select 语句返回 2 个单独的 ID,因此 insert 语句应该可以工作,但它不是,所以我不知道该怎么做......

4

1 回答 1

5

我建议您不要为此使用游标。基于连接的简单插入将执行以下操作:

DECLARE @NewCollisionDiagram TABLE (
   IndividualID uniqueidentifier,
   UniqueCOlID uniqueidentifier
);

INSERT MVCOmar2.dbo.PrideMVCCollisionDiagram (
   IndividualID,
   ColDiagram,
   dateEntered,
   OfficerID,
   UniqueColID,
   ESDEditDiagram
)
SELECT
   newid() NewIndividualID, //alias not needed but here for clarity
   CD.ColDiagram,
   CD.dateEntered,
   CD.OfficerID,
   newid() NewUniqueColID,
   CD.ESDEditDiagram
OUTPUT
   inserted.NewIndividualID,
   inserted.NewUniqueColID
INTO
   @NewCollisionDiagram
FROM
   MVCOmar2.dbo.PrideMVCCollisionDiagram CD
   INNER JOIN MVCOmar2.dbo.PrideMVCDriver D
      ON CD.IndividualID = D.IndividualID 
WHERE
   D.UniqueColID = '895AE0DE-D2CF-461E-ADA9-14FB8BB59640';

现在,如果您需要使用新的NewIndividualIDNewUniqueColID值,您可以从@NewCollisionDiagram表中获取它们。如果您必须使用逐行处理(您正在执行诸如发送电子邮件或创建表格之类的操作,这绝对需要它),那么您只能在最后一秒,在具有最终数据形式的表格上执行此操作就在它必须逐行处理之前。

要尝试解决您遇到的问题,我建议您将上面的最后一条 INSERT 语句调整为简单的 SELECT,尝试您的过程,看看输出是否符合您的预期。您在游标中的隐式 JOIN 逻辑可能不太正确。

我发现您从要插入的同一个表中进行选择的方式以及 Driver 表中的 IndividualID 是否已经存在于 CollisionDiagram 表中存在潜在的不一致。

于 2012-08-03T17:13:32.533 回答