选择一个值,然后在 c# 的同一查询中更新该值

Posted

技术标签:

【中文标题】选择一个值,然后在 c# 的同一查询中更新该值【英文标题】:Select a value and then update the value in same query in 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 没有。但你不需要。要么使用存储过程,要么执行两个单独的命令(将第一个的结果作为参数传递给第二个) 【参考方案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

以上是关于选择一个值,然后在 c# 的同一查询中更新该值的主要内容,如果未能解决你的问题,请参考以下文章

oracle中已经知道一个具体值,如何根据该值查询出含有该值的表名和列名?

在同一查询中返回分组值的平均值以及该值的前 n% 的平均值?

更新/删除查询的性能

Mysql 选择值然后更新

在同一查询中选择和更新 PostgreSQL 以进行优化

SQL 在单个查询中更新和选择