C# 选择查询并在同一存储过程中更新查询

C# 选择查询并在同一存储过程中更新查询,c#,.net,sql-server,stored-procedures,system.data,C#,.net,Sql Server,Stored Procedures,System.data,我有一个存储过程,在该存储过程中,我将根据条件选择一些行,并且我需要更新同一存储过程中这些行的状态。 例如 在SQL中调试时,存储过程工作正常。我是这样通过C访问StoredProcess的 private ProcessData[] ReadFromDb(string StoredProcedure, SqlConnection Connection) { List<ProcessData> Data = new List<Proces

我有一个存储过程,在该存储过程中,我将根据条件选择一些行,并且我需要更新同一存储过程中这些行的状态。 例如

在SQL中调试时,存储过程工作正常。我是这样通过C访问StoredProcess的

private ProcessData[] ReadFromDb(string StoredProcedure, SqlConnection Connection)
        {
            List<ProcessData> Data = new List<ProcessData>();
            SqlCommand Command = new SqlCommand(StoredProcedure, Connection);
            Command.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                Command.CommandTimeout = CONNECTION_TIMEOUT;
                using (SqlDataReader Reader = Command.ExecuteReader())
                {
                    while (Reader.Read())
                    {
                        Data.Add(new ProcessData()
                        {
                              Id = Reader["Id"];
                              ...
                           });
                    }
                }
            }
            catch (Exception ex)
            {}
        }
问题是我在C中获得了所需的行,但存储过程中的更新查询不起作用。
谁能给我一些建议我哪里出了问题。

下面的步骤

UPDATE myTable 
SET [Status] = 'Locked' 
From myTable 
Inner Join myTable.id = #TempTable.id;
应该是

UPDATE myTable 
SET [Status] = 'Locked' 
From myTable 
Inner Join #TempTable 
   on myTable.id = #TempTable.id;
而COMMINT-trant1应该被COMMIT-trant1取代

最后,您不应该在没有ORDER BY的情况下使用SELECT TOP

这个很好用

更新 A. 设置 foo=B.bar 从…起 表A 参加 A.col1=B.colx上的表B 哪里

您可以在一条语句中使用OUTPUT子句来执行此操作,而无需创建临时表


请参阅以获取示例。

来自myTable内部连接myTable.id=tentable.id;您的真实代码您正在忽略catch exception ex{}中的异常。如果COMMIT TRAN T1由于任何原因失败,您将获得行,但更新将回滚。我怀疑这就是正在发生的事情。我正在用真实的代码处理异常,但我没有得到任何异常。在代码中,我将获得选定的行。更新查询不更新值。若我调试SQL更新查询中的存储过程,那个么查询工作正常
UPDATE myTable 
SET [Status] = 'Locked' 
From myTable 
Inner Join #TempTable 
   on myTable.id = #TempTable.id;
SELECT TOP 5 * INTO #TempTable FROM myTable WHERE ENABLED = 1;
UPDATE myTable 
SET [Status] = 'Locked'  
From myTable  
WHERE id in (select TOP 5 * FROM myTable WHERE enabled=1)