【问题标题】:SQL Server stored procedure executes fine from Mgmt Studio but not from websiteSQL Server 存储过程从 Mgmt Studio 可以正常执行,但不能从网站执行
【发布时间】: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


【解决方案1】:

“FROM:”前多了一个逗号

UPDATE O
SET DATAREVISIONTYPE = 'Modify', FROM abc as O

【讨论】:

  • “修改”后面的逗号来自糟糕的复制粘贴作业。不幸的是,这不是问题。
猜你喜欢
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2011-11-07
  • 2015-08-28
  • 2019-04-03
  • 2015-06-18
  • 2010-10-29
  • 2010-12-11
相关资源
最近更新 更多