0

我实际上有2个问题。下面的“更新 O”在 SQL Server Management Studio (2005) 中执行良好,但在从网站 (C#/ASP.NET) 执行时不运行。我与原始工作代码的唯一区别是将 LEFT 命令添加到 LEFT(EmployeeBirthdate, 4)

这很奇怪,因为第一个查询在通过网站运行时运行良好,但第二个却没有。

ALTER PROCEDURE [dbo].[ValidateTransfers]
AS
BEGIN
    UPDATE p
    SET DATAREVISIONTYPE = 'Transfer'
    FROM abc as p
    WHERE DATAREVISIONTYPE  = 'Delete' AND
    (SELECT COUNT([OriginalUserId]) FROM abc WHERE DataRevisionType = 'Add' AND FirstName = p.FirstName 
    AND LastName = p.LastName AND EmployeeEmailAddress = p.EmployeeEmailAddress AND EmployeeBirthdate = LEFT(p.EmployeeBirthdate, 4))> 0

    UPDATE O
    SET DATAREVISIONTYPE = 'Modify' FROM abc as O
    WHERE DATAREVISIONTYPE = 'Add' AND
    (SELECT COUNT([OriginalUserId]) FROM abc WHERE DataRevisionType = 'Transfer' AND FirstName = O.FirstName 
    AND LastName = O.LastName AND EmployeeEmailAddress = O.EmployeeEmailAddress AND LEFT(EmployeeBirthdate, 4) = O.EmployeeBirthdate)> 0
END

我的第二个问题是,当我向 set 命令添加更多集合时,它们实际上并没有更改任何数据。

UPDATE O
SET DATAREVISIONTYPE = 'Modify' 
    O.OriginalUserID = OriginalUserID, 
    O.EmployeeBirthdate = EmployeeBirthdate, 
    O.User_ID = User_ID
FROM abc as O
WHERE DATAREVISIONTYPE = 'Add' AND
(SELECT COUNT([OriginalUserId]) FROM abc WHERE DataRevisionType = 'Transfer' AND FirstName = O.FirstName 
AND LastName = O.LastName AND EmployeeEmailAddress = O.EmployeeEmailAddress AND LEFT(EmployeeBirthdate, 4) = O.EmployeeBirthdate)> 0

提前致谢!

编辑:“修改”后面的逗号来自糟糕的复制粘贴工作。不幸的是,这不是问题所在。

编辑 2:另外,当我单独执行特定查询时,第二个查询大约需要一分钟才能完成,而第一个查询是即时的。另一方面,如果我突出显示整个存储过程并点击执行,它会立即完成,并且会出现与从网站运行相同的问题。IE,正确的记录设置为“转移”,但“修改”不起作用

4

1 回答 1

0

在“FROM:”之前有一个额外的逗号

UPDATE O
SET DATAREVISIONTYPE = 'Modify', FROM abc as O
于 2013-07-09T18:31:17.143 回答