設定:
- 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#ます。
私は何が欠けていますか?これは何が原因でしょうか?レコードを更新し、同時に結果を取得するにはどうすればよいですか?