SQL Server 2014 未返回标识值

Identity Value not being returned by SQL Server 2014

我们有一个 PowerBuilder 客户端应用程序 (PB 12.5),它在过去 6 年中一直在生产中,并且在 SQL MSDE 和 MS-SQL Server 2012 上运行良好。

最近,我们将一些安装(大约 40 个)升级到 SQL Server 2014。在大约一半的安装中,我们发现身份列 不是 调用update方法后返回到DataWindow。这是有问题的代码:

If lds_Update.Update( ) < 1 then
   lb_Error = True
   ls_Temp = "The inspection header could not be created."
Else
   ll_InspID = lds_Update.GetItemNumber(1, "Insp_ID")
   If (ll_InspID <= 0) or Isnull(ll_InspID) then 
       lb_Error = True  // This is being hit as ll_InspID is null
       ls_Temp = "Could not retrieve the inspection identity."
   End If
End If

DataWindow 的标识列和主键设置正确。

并非所有安装都会出现这种情况,只有部分安装会出现这种情况。所有安装都几乎相同。 PB 应用程序安装在服务器上并从瘦客户端启动。

连接字符串如下:

SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='ServerName',PROVIDERSTRING='Database=DBName',Identity='SCOPE_IDENTITY()'"

我们已经尝试过几个测试安装和 SQL Server 2014 Express,但它工作正常。只有在某些安装上才会失败,我们不知道为什么。我们也试过改成 Identity='@@IDENTITY' 但没有效果。

有没有人有什么想法?

您可以通过更改用于检索标识值的查询 pbodbxxx.ini 文件(其中 xxx 是您使用的 PB 版本 - 120 in 这种情况下为 PB12)。尽管文件的命名约定,Sybase 有 选择使 OLE DB 连接响应 文件。在这种特殊情况下,更改以下行 [MS_SQLSERVER_SYNTAX]节

来自 GetIdentity='Select @@identity'

到 GetIdentity='SELECT SCOPE_IDENTITY()'

如果您选择此路径,则需要将 INI 文件与您的 应用。请注意,这适用于 PB11 - 我认为它仍然适用于 PB12.

有趣的文章: https://blogs.sap.com/2012/10/25/using-autoincrementing-columns-from-a-powerbuilder-datawindow/

我正在使用 SQL 本机驱动程序。这是我的事务对象的 DBparms 部分的一部分:

 "Provider='SQLNCLI10', Identity='SCOPE_IDENTITY()'

这对我有用。