当前位置: 首页 > 知识库问答 >
问题:

赛贝斯ASE BulkCopy"不支持数据类型或函数"写入非空用户定义类型

冀胤运
2023-03-14

我在将NUMERIC(8,0)从Sql Server迁移到ASE(v16.0)中具有用户定义类型的NUMERIC(8,0)的列时遇到问题。

我有简单的用户定义类型:

IF EXISTS (SELECT * FROM systypes WHERE name='typ_small_id')
BEGIN
EXEC sp_droptype 'typ_small_id'
IF EXISTS (SELECT * FROM systypes WHERE name='typ_small_id')
    PRINT '<<< FAILED DROPPING DATATYPE typ_small_id >>>'
ELSE
    PRINT '<<< DROPPED DATATYPE typ_small_id >>>'
END
go
EXEC sp_addtype 'typ_small_id','numeric(8,0)','NOT NULL'
go
IF EXISTS (SELECT * FROM systypes WHERE name='typ_small_id')
    PRINT '<<< CREATED DATATYPE typ_small_id >>>'
ELSE
    PRINT '<<< FAILED CREATING DATATYPE typ_small_id >>>'
go

这在一个小表中使用:

create TABLE dbo.target
(
    e_type_id     typ_small_id  /*NOT*/ NULL
)

我正在尝试使用AseBulkCopy从SqlServer批量复制单个值。WriteToServer。源值在SqlServer中定义为NUMERIC(8,0)。我使用. net客户端进行ASE,我的应用程序代码是C#:

public void BulkCopyFromSqlServer_t_secu_交换(string sourceConnectionString,string targetConnectionString){SqlConnection sourceConnection=null;AseConnection targetConnection=new AseConnection(targetConnectionString);try{IDataReader dataSource;//下一个方法调用返回一行和一列,定义为数字(8,0)在SqlSvr中。MssqlReader。GetDataReaderSelect_t_sec_exchange(out sourceConnection,out dataSource);目标连接。Open();AseBulkCopy blk=new-AseBulkCopy(targetConnection,new-AseBulkCopyOptions(),null);布莱克。BulkCopyTimeout=1200;布莱克。DestinationTableName=“dbo.target”;布莱克。列映射。清除();布莱克。WriteToServer(数据源);布莱克。Close();}catch(AseException ex){Console.WriteLine(ex.Message);}最后{sourceConnection.Dispose();targetConnection.Dispose();}

来自SqlServer的值为1。在我定义目标之前,这一切都可以正常工作。e_type_id作为typ_small_idNOT NULL而不是为空。当我这样做时,我得到一个AseError:不支持数据类型或函数。

堆栈跟踪:位于Sybase。数据一个客户。AseBulkCopyBusinessBulk。TdsToAseDBType(TDSTYPES定义类型、Int32 len、Int32 usertype、布尔值IsNullable、Int32

当列被定义为typ_small_id NOT NULL时,下面的查询都成功地从查询编辑器将数据插入到列中,因此它看起来像WriteToServer代码中的错误:

插入dbo.target(e_type_id)SELECT top 1 cast(1作为数字(8,0))e_type_idfromsource_tbl

插入到dbo中。目标(e_type_id)从源代码中选择前1个cast(1个为int)作为e_type_id

不用说,customer的表将列定义为NOTNULL(并且不能更改模式),因此我需要了解如何将数据迁移到他们的ASE表中。

有没有人看到这一点或找到解决办法?


共有1个答案

贲言
2023-03-14

这已被SAP(赛贝斯技术支持)确认为错误。

 类似资料:
  • 我们将Sybase ASE用于从头开发的应用程序。我们有一些表有位列。在Sybase中,位数据类型不能为null。对于我们存储在表中的记录来说,这很好,但是我们的搜索存储过程存在设计问题。我们的存储过程和相应的数据访问层类(在.NET中使用Dapper)严重依赖代码生成器。由于我们无法将位参数的NULL传递给搜索存储过程,因此我们只能检索位列中具有1或0值的记录。下面的例子: 这里有一些变通方法,

  • 我对卡桑德拉的数据建模有一个疑问,希望能在这里提出一些建议。 我们正在尝试构建一个多租户应用程序,我们希望数据结构由用户定义。用户可以定义数据源、字段数量、数据类型、顺序等,然后基于此结构上载数据。既然Cassandra不支持混合数据类型列表,我们如何在Cassandra之上设计这样的应用程序呢。当前集合类型为映射(相同类型)/集/列表(相同类型)。此外,是否可以基于用户定义的实体查询数据? 目前

  • 谷歌云SQL提供的所有数据类型是什么? 我正在迁移一个数据库,所以我想知道谷歌云支持的数据类型。如果有任何官方链接,请提供。

  • Support for the Sybase database. The following table summarizes current support levels for database release versions. 数据库接口支持 The following dialect/DBAPI options are available. Please refer to individ

  • OpenGL定义了C函数来管理资源。我编写了一个简单的包装器来以RAII的方式处理它们。函数对类似于和。但是,也有一些函数对适用于资源数组,例如和。对于前者,我编写了一个简单的类来完成这项工作,对于后者,我编写了另一个处理数组的类。然而,我注意到有时我只使用一个缓冲区或纹理,在那里我不必承担向量的费用,我想如果发布函数在开始时采用大小参数,我会专门化类析构函数,但是... 对于上述SSCCE g树

  • pg 相对于其它关系型数据库的一大优势就在于成熟的复杂类型支持,包括数组、JSON 对象、HStore 等等。 Array pg 的数组功能非常强大,支持类型数组、多维数组、定长数组。 定义一个简单的数组列: CREATE TABLE sample_table ( array_example integer[], ); 对应插入语句: INSERT INTO sample_table