設定:
- asp.net MVC
- SQL サーバー 2008 R2
送信するメッセージのリストを取得する手順があります。結果レコードを更新して、誤って同じレコードを 2 回プルしないようにしたい。どのようにアプローチしてもSSMS
、正しいメッセージのリストが生成されます。ただし、同じ手順でレコードを更新すると、C# では結果が得られません。
私はこのようなものを使ってみDataAdapter
ました:
var da = new SqlDataAdapter(cmd);
da.Fill(table);
そしてDataReader
このように:
var dataReader = cmd.ExecuteReader();
table.Load(dataReader);
dataReader.Close();
my に入力してDataTable
も、どちらも結果に影響を与えないようです。
私の手順は次のようになります。
ALTER PROCEDURE [dbo].[MnxNoticeGetMessages]
@sessionId uniqueidentifier = null
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Output TABLE (messageid uniqueidentifier)
INSERT INTO @Output
SELECT messageid FROM MnxTriggerEmails WHERE dateSent is null
SELECT * FROM MnxTriggerEmails WHERE messageid IN (SELECT messageid FROM @Output)
UPDATE MnxTriggerEmails SET dateSent=GETDATE()
WHERE messageid IN (SELECT * FROM @Output)
END
これにより、SSMS
ではなく で結果が生成されC#
ます。
このようにコメントアウトするとUPDATE
(他の変更はありません):
--UPDATE MnxTriggerEmails SET dateSent=GETDATE()
-- WHERE messageid IN (SELECT * FROM @Output)
と の両方SSMS
で期待される結果が得られC#
ます。
私は何が欠けていますか?これは何が原因でしょうか?レコードを更新し、同時に結果を取得するにはどうすればよいですか?