gpt4 book ai didi

sql - 为什么这个存储过程没有返回正确的 ID?

转载 作者:行者123 更新时间:2023-12-04 22:33:35 24 4
gpt4 key购买 nike

此存储过程间歇性地返回一个数百万的 ID,而实际上它应该只有 400 左右。

set ANSI_NULLS OFF
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[TestStoredProcedure]
(
@Title VARCHAR(50),
@ID INT OUTPUT
)
AS

DECLARE @ResultsTable Table(InsertedID INT);

INSERT INTO Table
(
Title
)
OUTPUT INSERTED.ID INTO @ResultsTable
VALUES
(
@Title
);
SELECT @ID = (SELECT TOP 1 InsertedID FROM @ResultsTable);

此存储过程过去使用 SCOPE_IDENTITY() 返回 ID,但存在同样的问题。

数据库中没有触发器。只有 SQL Server 自动创建的主键索引。根本没有任何表格的 ID 与返回的内容一样大,所以我不知道这些大数字是从哪里来的。

如有任何帮助或建议,我们将不胜感激。

编辑:正如我上面所说,这个存储过程最初是这样使用 SCOPE_IDENTITY() 的:

set ANSI_NULLS OFF
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[TestStoredProcedure]
(
@Title VARCHAR(50),
@ID INT OUTPUT
)
AS

INSERT INTO Table
(
Title
)
VALUES
(
@Title
);
SELECT @ID = SCOPE_IDENTITY();

编辑 2:
确切的 SQL 版本是:
Microsoft SQL Server 2005 - 9.00.4230.00 (X64) Jul 30 2009 13:42:21 版权所有 (c) 1988-2005 Microsoft Corporation Standard Edition(64 位)在 Windows NT 5.2(Build 3790:Service Pack 2)上

编辑 3:
这就是调用存储过程的方式(很好的旧经典 ASP,它是一个遗留站点)

set obj_CMD = Server.CreateObject("ADODB.Command")
with obj_CMD
.ActiveConnection = Application("DSN")
.CommandText = "TestStoredProcedure"
.CommandType = adCmdStoredProc

dim txt_title
txt_title = "Some text"

set oParam = .CreateParameter("@Title",adVarChar,adParamInput,50,txt_title)
.Parameters.Append oParam
set oParam = .CreateParameter("@ID",adInteger,adParamOutput)
.Parameters.Append oParam
.Execute

dim ID
ID = .Parameters("@ID").Value

end with
set obj_CMD = nothing

编辑 4:
运行 DBCC CHECKIDENT ('Table') 返回:

正在检查身份信息:当前身份值“422”,当前列值“422”。DBCC 执行完成。如果 DBCC 打印出错误消息,请联系您的系统管理员。

这符合预期。

最佳答案

我认为问题在于您如何执行 sp。

declare @i int = 0

EXEC [TestStoredProcedure] '1', @i OUTPUT

select @i

也许您忘记了 OUTPUT 关键字...

编辑:如果是这样 - 使用 SCOPE_IDENTITY() 因为这是在您的情况下获取 id 值的更好方法。

关于sql - 为什么这个存储过程没有返回正确的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424703/

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