SQL Server 获取SAP表数据时抛出错误8114

vd8tlhqk  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(523)

我尝试从SAP数据更新SQL数据(插入时也会发生同样的情况)。我总是得到运行时错误
SQL错误8114
例外的原因是:
数据库错误文本:“将数据类型nvarchar转换为numeric时出错。”
'gs_sap_table2'的所有字段都是类型CHAR100。我尝试了很多方法,例如将结构中的一些字段从CHAR 100转换为十进制18,5,并使用值填充所有'NOT NULL' SQL字段,但问题仍然存在。
我把我的ABAP代码和SQL数据库字段的图片发给你:

EXEC SQL.
        CONNECT TO :gv_connection
      ENDEXEC.

      EXEC SQL.
        UPDATE STOCKKEEPINGUNITS
           SET ProductId           = :GS_SAP_TABLE2-PRODUCTID,
               CreatedOn           = :GS_SAP_TABLE2-CREATEDON,
               UpdatedOn           = :GS_SAP_TABLE2-UPDATEDON,
               UPC                 = :GS_SAP_TABLE2-UPC,
               AvailabilityType    = :GS_SAP_TABLE2-AVAILABILITYTYPE,
               Stock               = :GS_SAP_TABLE2-STOCK,
               Currency            = :GS_SAP_TABLE2-CURRENCY,
               TaxClass            = :GS_SAP_TABLE2-TAXCLASS,
               RetailCurrentPrice  = :GS_SAP_TABLE2-RETAILCURRPRICE,
               Weight              = :GS_SAP_TABLE2-WEIGHT,
               MeasurementUnitId   = :GS_SAP_TABLE2-MEASUREMENTUID,
               NameL1              = :GS_SAP_TABLE2-NAMEL1,
               NameL2              = :GS_SAP_TABLE2-NAMEL2,
               ShippingCost        = :GS_SAP_TABLE2-SHIPPINGCOST
        WHERE SKUId = :GS_SAP_TABLE2-SKUID
      ENDEXEC.

      EXEC SQL.
        COMMIT
      ENDEXEC.

      EXEC SQL.
        DISCONNECT :gv_connection
      ENDEXEC.

pprl5pva

pprl5pva1#

该错误告诉您存在一个nvarchar值,并且正试图将其隐式转换为数值类型。因此,错误发生在SETWHERE子句中。由于在WHERE子句中,两个操作数中的一个是字段SKUId,它是varchar,而不是nvarchar或数值类型,很明显错误发生在SET子句中的某处。
SET子句中,您可以将值指派给字段。当且仅当右边(即)为nvarchar,而左边(即字段)为数值时,才会在这些指派中从nvarchar转换为数值。
因此,为了解决您的问题,您需要

  • 为自己创建一个列表,其中包含SET子句中接收某个值的所有数值字段
  • 确保每个字段的赋值操作的值(右侧)是converted,转换为字段所需类型的数值

相关问题