假设这是 Sybase ASE(257 是标准 ASE 系统错误号)...
col1=null 不会告诉数据库col1 的数据类型应该是什么,因此数据库默认列的数据类型为int。
通过select/into 创建表时,您需要确保使用所需的数据类型创建每列。对于这个特定实例,请尝试:
select col1=convert(varchar(10),null), col2=convert(tinyint,2) into #myTable
注意事项:
- 修改
convert() 调用以引用所需的数据类型
- 当从另一个表的列填充新列时,源列数据类型将用于确定新列的数据类型
还要记住以下几点:
select col1='test' into #otherTable
col1 的数据类型将根据初始数据值确定;在这种情况下,值'test' 告诉数据库您需要存储4 个字符,因此数据库将默认列的数据类型为varchar(4)。这应该没问题,只要您从不打算插入超过 varchar(4) 的任何内容,否则您需要提供带有初始 select/into 的 convert() 以明确说明列的数据类型,例如:
select col1=convert(varchar(35),'test') into #otherTable
假设您通过了 不允许从数据类型 'VARCHAR' 到 'INT' 的隐式转换。 如果您尝试以下操作,可能会出现错误消息: p>
update #myTable set col2 = NULL
结果是您看到类似于 column does not allow nulls 的错误消息。
与确定数据类型一样,Sybase (ASE) 将尝试以几种不同的方式确定列的 NULLability:
- 如果为列分配了 NULL 的“值”(如示例中:
col1 = null),则 ASE 将配置该列以允许 NULL
- 如果该列的值是从另一个表中复制的,则源列的 NULLability 将用于确定新列的 NULLability
- 如果查询明确将列定义为 NULLable(参见下面的示例),那么该列将被配置为允许 NULL
- 如果数据库选项
allow nulls by default 是 false(ASE 默认设置),那么列的 NULLability 将设置为“not NULL”
- 当一切都失败时...
- 如果数据库选项
allow nulls by default 是true,那么列的NULLability 将设置为'NULL'(able)
显式定义列以允许 NULL 的示例:
select col1 = convert(varchar(35) null,'test') into #otherTable