gpt4 book ai didi

java - 通过 SQL 更新单个记录并获取已更新记录的 id 的最佳方法是什么? (Java/MSSQL)

转载 作者:行者123 更新时间:2023-12-02 08:38:40 24 4
gpt4 key购买 nike

我知道我可以像这样更新单个记录 - 但如何才能访问已更新记录的 ID? (我使用的是 MSSQL,因此无法使用 Oracle RowId)

update myTable
set myCol = 'foo'
where itemId in (select top 1 itemId from myTable )

如果我执行插入,我可以使用 getGenerateKeys 来获取 id 字段值,但我不认为更新有等效的方法?

我知道我可以使用可滚动结果集来做我想做的事情

stmt = conn.prepareStatement("select top 1 myCol, itemId from myTable", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = stmt.executeQuery();
if(resultSet.first()){
resultSet.updateString(1, "foo");
resultSet.updateRow();
String theItemId = resultSet.getString(1)
}
resultSet.close();

但我担心性能,因为测试显示负载下的锁定超时,我想知道是否有更好/更简单的方法?

--编辑:只是为了解决这个问题......当我们迁移到MSSQL2005时,我们将升级我们的代码以使用Rich的答案。在当前版本中,我们使用了锁定提示:(UPDLOCK ROWLOCK READPAST) 来缓解我们原始代码所显示的性能问题。

最佳答案

这个示例在 MSSQL 2005 中运行得非常好...

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

DROP TABLE [dbo].[TEST_TABLE]
GO

CREATE TABLE [dbo].[TEST_TABLE](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
CONSTRAINT [PK_TEST_TABLE] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


-- An insert which will return the identity
INSERT INTO [dbo].[TEST_TABLE] ([name])
OUTPUT inserted.id
VALUES('Test 1')

-- Another insert which will return the identity
INSERT INTO [dbo].[TEST_TABLE] ([name])
OUTPUT inserted.id
VALUES('Test 2')

-- Now an update which will return the identity
UPDATE [dbo].[TEST_TABLE]
SET [name] = 'Updated Test 1'
OUTPUT inserted.id
WHERE [name] = 'Test 1'

SELECT id, [name] FROM [dbo].[TEST_TABLE]

更具体地说,针对您的查询...

update myTable
set myCol = 'foo'
output inserted.itemid
where itemId in (select top 1 itemId from myTable )

关于java - 通过 SQL 更新单个记录并获取已更新记录的 id 的最佳方法是什么? (Java/MSSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/352673/

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