C++ 如果与SQLBindParameter一起使用,SCOPE_IDENTITY()始终返回NULL
我尝试通过ODBC sql server将数据插入数据库。 我想拿回此行的Id,所以我使用C++ 如果与SQLBindParameter一起使用,SCOPE_IDENTITY()始终返回NULL,c++,sql-server,C++,Sql Server,我尝试通过ODBC sql server将数据插入数据库。 我想拿回此行的Id,所以我使用selectscope_IDENTITY() 因为这个表的id是主键,并且是自动递增的。 Insert函数工作正常,数据被插入数据库。 但是当我使用选择SCOPE_IDENTITY()时返回NULL 所以我尝试使用不带SQLBindParameter的纯语句选择范围_标识()工作正常。您对我在使用SQLBindParameter时出现问题的原因有何建议 这是我的dB表格: [主键](长)Id (nvarch
selectscope_IDENTITY()代码>
因为这个表的id是主键,并且是自动递增的。
Insert函数工作正常,数据被插入数据库。
但是当我使用选择SCOPE_IDENTITY()时代码>返回NULL
所以我尝试使用不带SQLBindParameter的纯语句<代码>选择范围_标识()代码>工作正常。您对我在使用SQLBindParameter时出现问题的原因有何建议
这是我的dB表格:
[主键](长)Id
(nvarchar(255))名称
(空头)头寸
这个问题的解决方案是使用“OUTPUT”子句返回插入项的成员,而不是调用selectscope_IDENTITY()代码>
因此,完整的sql命令是插入[dbo].[Test]([Name],[Position])输出插入的[Id]值(?,1)代码> < /P>虽然我不能读取C++,但它看起来像你的代码>插入< /C> >,调用<代码> StopeIOnIsIs/COD> >在不同的批次/范围内;因此,插入的范围已经丢失。您应该在同一作用域(名称中提示)中返回SCOPE\u IDENTITY
的值。@Larnu感谢您的响应,我尝试移动“``SCOPE\u IDENTITY```以在INSERT
函数中切换大小写,但结果仍然相同。是否检查了SQLBindCol
?如果SQL中的标识列是int
,而不是bigint
,您是否尝试过使用SQL\u C\u int
来代替它?@AlwaysLearning我已经检查了SQLBindCol
的SQLRETURN
,结果是SQL\u SUCCESS
。我试着使用SQL\u C\u SBIGINT
,结果仍然是相同的NULL
。我想应该是SQLBindCol(hStmt,0,…。
,并且您可能想首先强制转换结果选择强制转换(SCOPE\u IDENTITY()AS int))代码>因为