【发布时间】:2013-07-09 18:19:10
【问题描述】:
我实际上有两个问题。下面的“更新 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,正确的记录设置为“转移”,但“修改”不起作用
【问题讨论】:
-
错误信息是什么?
-
您的第二个查询看起来是将值获取/设置为相同的值,即 O.OrginalUserID 和 OriginalUserID 在该上下文中是相同的。
-
'Modify'后面真的还有逗号吗?那甚至不应该编译。 -
@KevinDahl 你有关于如何构造查询的建议,以便 O.OriginalUserID (etc) 像在“SELECT COUNT”中一样正常工作吗?
-
@RBarryYoung 没有错误消息,网站(和 SELECT 查询)显示从第一个查询('Transfer')所做的更改,但第二个查询实际上没有将任何字段更改为'修改'
标签: sql sql-server stored-procedures