gpt4 book ai didi

c# - 将多行插入 MS SQL Server 并检索所有新表 ID 的背面

转载 作者:行者123 更新时间:2023-11-30 17:42:57 30 4
gpt4 key购买 nike

查看此处给出的示例: https://stackoverflow.com/a/452934

我知道我需要遍历循环并附加值子句,但我缺少的是如何修改查询以返回新创建记录的所有 ID 并在 C# 中检索它们?

例如,我当前的代码如下所示,我想将其更改为在一个查询中插入多行并理想地检索新创建的 Id 作为整数列表。

in_new_id = -1;
String query = "INSERT INTO " + DB_Base.DBTable_Customer_Order_Table + "(" + DB_Base.DBTable_Customer_Order_Table_Customer_ID + "," + DB_Base.DBTable_Customer_Order_Table_ProductId+")";
query += " OUTPUT INSERTED." + DB_Base.DBTable_Customer_Order_Table_ID;
query += " VALUES ( @customerId, @productId);";

using (SqlConnection conn = new SqlConnection(GeneralConfig.DB_STR()))
{
SqlCommand sql_command = new SqlCommand(query, conn);
sql_command.Parameters.AddWithValue("@customerId", data_obj.customerId);
sql_command.Parameters.AddWithValue("@productId", data_obj.productId);
if (!String.IsNullOrEmpty(query) && sql_command != null && conn != null)
{
sql_command.Connection.Open();
if (sql_command.Connection.State == System.Data.ConnectionState.Open)
{
object out_new_id = sql_command.ExecuteScalar();
if (out_new_id != null)
{
in_new_id = (int)out_new_id;
}
sql_command.Connection.Close();
return ENUM_DB_Status.DB_SUCCESS;
}
else
{
in_new_id = -1;
return ENUM_DB_Status.DB_CONNECTION_COULD_NOT_OPEN;
}
}
}

return ENUM_DB_Status.DB_FAIL;

最佳答案

使用这个:

List<int> ids = new List<int>();
using (SqlCommand command = new SqlCommand(@"declare @T TABLE(Id int)
INSERT INTO YourTableName(YourTableColumnNames)
OUTPUT Inserted.Id into @T VALUES
(YourValues1),
(YourValues2),
(YourValues3),
(etc...) select Id from @T ", con))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = int.Parse(reader[0].ToString());
ids.Add(id);
}
}
}

警告!!! 这仅在您使用 SQLServer 2008 R2 或更高版本时有效。
编辑:正如 Damien 在评论中所说:“无法保证更改应用于表的顺序以及行插入输出表或表变量的顺序将对应。”

关于c# - 将多行插入 MS SQL Server 并检索所有新表 ID 的背面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31532808/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com