选择一个值,然后在 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中已经知道一个具体值,如何根据该值查询出含有该值的表名和列名?