【问题标题】:SCOPE_IDENTITY() return 1SCOPE_IDENTITY() 返回 1
【发布时间】:2018-09-14 21:41:48
【问题描述】:

我在 SQL Server 2012 中使用此代码:

INSERT INTO [dbo].[test] ([t]) 
VALUES ('tyy');

SELECT [Id] 
FROM [dbo].[test] 
WHERE ([Id] = SCOPE_IDENTITY())

它返回最后插入的 id 并且运行良好。

但是 vb.net 2017 和 .net Framework 4.7.2 中的相同代码不起作用 - 对于每个插入,它返回 1。

这是代码:

Dim id = TestTableAdapter.InsertQuery("nvnh")

表:

CREATE TABLE [dbo].[test] 
(
    [Id] INT IDENTITY (1, 1) NOT NULL,
    [t]  NVARCHAR (50) NULL,
    CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ([Id] ASC)
);

【问题讨论】:

  • 您确定前一个插入与您在 VB.net 代码中的第二个插入在同一范围内运行吗?
  • 您可以简单地使用 SELECT SCOPE_IDENTITY() 而不是您的 select...from...where
  • 什么是TestTableAdapter.InsertQuery?您确定它返回的是结果集而不是受影响的行数吗?
  • 感谢重播,是的,我确定在保存范围内,我使用的 SELECT SCOPE_IDENTITY() 也在 sql server 中工作,但在 vb.net 中返回 1,TestTableAdapter.InsertQuery 是查询在数据表中具有相同的代码内部数据集设计器
  • 您必须声明一个 SqlTransaction 类型的对象并调用 myConnection.BeginTransaction() 完成您的工作,然后调用 myTrans.Commit();然后关闭 myConnection。

标签: sql-server vb.net scope-identity


【解决方案1】:

谢谢大家。 我终于找到了解决办法。

我已经使用了上述解决方案中的任何一个,

但查询 eqcutemodeNonQuery ,所以它给了我插入的行数 我把它改成了Scalar

【讨论】:

  • 你应该让其他人先回答。前段时间我确实在评论中问过你这个问题,但你没有检查。
  • 谢谢你,我看到了它和你的评论以及在谷歌中的另一个搜索,我抓住了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多