sql插入行,但从该行返回一个项目

Posted

技术标签:

【中文标题】sql插入行,但从该行返回一个项目【英文标题】:sql insert row, but return an item from that row 【发布时间】:2016-05-07 07:57:18 【问题描述】:

使用 c#、visual studio、razor html 和 asp.net,我有一个订单表,它将客户编号保存在 ecustoemr_id 中,然后它会自动递增 order_id 字段,我需要选择该行的订单 ID我刚刚插入。我不能只从该客户编号中选择所有,因为客户会有多个订单 ID。下面是我如何将客户 ID 保存到数据库中,我需要将刚刚创建的行中的订单 ID 打印到变量中。 我花了几个小时在谷歌上搜索,找到了 php 的答案,但没有使用 c# 和 asp.net 提前谢谢

string sql = "insert into orders (User_ID) values ('" + Request["UserID"] + "')";
var rst1 = db.Query(sql);

【问题讨论】:

为什么不能使用 IDENTITY 列?你到底在用什么 rdbms? Order_ID 设置为身份 True,但我不知道如何调用它,我只是使用 Visual Studio 中内置的那个,它是我们被告知使用的大学 告诉我们你正在使用的 rdbms 的类型,Linq,Entity Framework? 最佳答案取决于您的 rdbms(例如 MS SQL-Server 或 Oracle)。在 SQL-Server 中,您可以使用 SCOPE_IDENTITY 这些大学教学生如何编写易受 SQL 注入影响的代码?几天内第二个。您应该使用命令参数,而不是尝试为您的 SQL 语句构建字符串。 【参考方案1】:

试试这样的:

string query = "INSERT INTO [Table] (id) OUTPUT INSERTED.ID VALUES (id value)";
SqlCommand com = new SqlCommand(query, dbconnection);
string value;
value = com.ExecuteScalar().ToString();

在这里阅读:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx

【讨论】:

【参考方案2】:

SCOPE_IDENTITY 的替代方法是 OUTPUT。比如:

DECLARE @OrderOutput TABLE (ID INT NOT NULL)
insert into orders (User_ID) 
OUTPUT Inserted.OrderId INTO @OrderOutput(ID)
values ('" + Request["UserID"] + "')"
SELECT ID from @OrderOutput

【讨论】:

我将如何在我的代码中使用它?我们只被教过如何运行简单的 sql 命令,比如 op 中的那个 您可以将其用作字符串而不是插入语句。 rst1 的值将是来自 @OrderOutput 的 ID。 您是否有机会将它从操作中用于我的代码?我试过复制你所说的,但我们只学过非常基本的 SQL,它超出了我的想象

以上是关于sql插入行,但从该行返回一个项目的主要内容,如果未能解决你的问题,请参考以下文章

根据 Oracle 的 SQL 中的优先级返回每个键的行

如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志

SQL 语句,用于查找项目的类型、包含状态以及最近添加的项目

当 Python 3.5.2 调用 gsutil rsync 时返回错误,但从命令行可以

基于行实例返回查询的 SQL 案例语句

导出为插入语句:但在 SQL Plus 中,该行覆盖了 2500 个字符!