C# 选择查询并在同一存储过程中更新查询
我有一个存储过程,在该存储过程中,我将根据条件选择一些行,并且我需要更新同一存储过程中这些行的状态。 例如 在SQL中调试时,存储过程工作正常。我是这样通过C访问StoredProcess的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
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)