我实际上有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,正确的记录设置为“转移”,但“修改”不起作用