【问题标题】:Select a value and then update the value in same query in c#选择一个值,然后在 c# 的同一查询中更新该值
【发布时间】:2021-08-27 13:01:36
【问题描述】:

我想使用 select 获取一个值,然后在同一查询的更新语句中使用 select 中的值。

using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = connection;

cmd.CommandText = "Declare @appln_id int;set @appln_id=select APPLN_INST_ID from CP.USR_RQST where RQST_ID=@RI;" +
"Update CP.APPLN_INST set SCRN_SESS_DTA=@SSD where APPLN_INST_ID=@appln_id";                

cmd.Parameters.Add("@RI", System.Data.SqlDbType.Int).Value = res.RequestDetails.AssetCollectionRequest.RequestId;                
cmd.Parameters.Add("@SSD", System.Data.SqlDbType.NVarChar).Value = somevalue;
cmd.Parameters.Add("@appln_id", System.Data.SqlDbType.Int).Direction = ParameterDirection.Output;                
connection.Open();
cmd.ExecuteNonQuery();
}

我在查询中遇到语法错误。

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'select'.

【问题讨论】:

  • 这看起来应该作为存储过程来完成
  • 是的,应该是。我只是想在 C# 代码中使用 SET 是不可能的吗?
  • AFAIK 没有。但你不需要。要么使用存储过程,要么执行两个单独的命令(将第一个的结果作为参数传递给第二个)

标签: c# mysql asp.net asp.net-core


【解决方案1】:

您没有声明 @appln_id 变量。

当您尝试为变量赋值时,您必须首先声明它。我没有在您的查询中看到 declare 关键字。

例如;你把它放在你的查询之上。这意味着在 Set 命令之前。

声明@appln_id INT; // int 是变量的数据类型。你应该改变你所需要的。

【讨论】:

  • 首先,将查询写清楚在下面。 code 声明 @appln_id INT; set @appln_id = 从 CP.USR_RQST 中选择 APPLN_INST_ID,其中 RQST_ID=@RI;更新 CP.APPLN_INST 设置 SCRN_SESS_DTA=@SSD 其中 APPLN_INST_ID=@appln_id; code 然后在 MSSQL Management Studio 中尝试查询。我认为查询是可以的,但你不能在你的 C# 代码中正确使用。
  • 是的,你能指出c#代码中的错误吗?我已经尝试过你所说的它似乎抛出了同样的错误
【解决方案2】:

试试

更新 CP.APPLN_INST 设置 SCRN_SESS_DTA=@SSD where APPLN_INST_ID=(select APPLN_INST_ID from CP.USR_RQST where RQST_ID=@RI)

【讨论】:

  • 是的,这可行,但问题的目的是如何在查询中使用 SET
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多