设置:
- ASP.NET MVC
- SQL 服务器 2008 R2
我有一个程序来获取要发送的消息列表。我想更新结果记录,这样我就不会意外地两次提取相同的记录。不管我如何处理它,都会SSMS
产生正确的消息列表。但是,如果我在同一过程中更新记录,C# 不会得到任何结果。
我试过使用DataAdapter
这样的:
var da = new SqlDataAdapter(cmd);
da.Fill(table);
像这样DataReader
:
var dataReader = cmd.ExecuteReader();
table.Load(dataReader);
dataReader.Close();
填充我的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#
。
我错过了什么?什么会导致这个?如何更新记录并同时获得结果?