Bul*_*vak 0 insert cursor sql-server-2008
我需要一些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
Run Code Online (Sandbox Code Playgroud)
我有上面的代码,Select语句工作正常,它返回2行,但由于一些奇怪的原因,光标不工作意味着插入语句没有插入任何没有意义的东西,因为个别的ID应该存在.那个select语句返回2个人ID,所以insert语句应该可以工作但不是这样我不知道该做什么...
我建议您不要使用光标.基于连接的简单插入将执行:
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';
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要使用new NewIndividualID和NewUniqueColIDvalues,可以从@NewCollisionDiagram表中获取它们.如果你必须使用逐行处理(你正在做类似发送电子邮件或创建表,这绝对需要它),那么你只能在最后一秒,在具有最终数据形式的表上执行它就在它必须逐行处理之前.
为了尝试解决您遇到的问题,我建议您将上面的最后一个INSERT语句调整为一个简单的SELECT,尝试您的过程,并查看输出是否符合您的预期.光标中的隐式JOIN逻辑可能不太正确.
我看到您从正在插入的同一个表中选择的方式可能存在不一致,以及Driver表中的IndividualID是否已存在于CollisionDiagram表中.