私は実際に2つの問題を抱えています。以下の「Update O」は、SQL Server Management Studio (2005) から正常に実行されますが、Web サイト (C#/ASP.NET) から実行すると実行されません。元の作業コードとの唯一の違いは、LEFT コマンドを LEFT(EmployeeBirthdate, 4) に追加したことです。
最初のクエリは Web サイトを介して実行すると正常に実行されますが、2 番目のクエリは実行されないため、これは奇妙です。
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
私の 2 番目の問題は、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: また、特定のクエリを個別に実行すると、2 番目のクエリが完了するまでに約 1 分かかり、最初のクエリは瞬時に実行されます。一方、ストアド プロシージャ全体を強調表示して実行を押すと、即座に終了し、Web サイトから実行した場合と同じ問題が発生します。IE、正しいレコードが「転送」に設定されていますが、「変更」は機能しません