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()'
这对我有用。
我们有一个 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()'
这对我有用。