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

无法更新在sybase中使用“select into”语句设置为null的列

何琨
2023-03-14

我正在sybase中创建一个临时表,如下所示

select col1 = null, col2 =2 into #myTable 

在这里,当我尝试更新col1时

update #myTable  set col1 = 'test'

我收到错误-“[错误代码:257,SQL状态:42000]不允许从数据类型'VARCHAR'隐式转换为'INT'。请使用CONVERT函数运行此查询。”

谁能帮我修一下吗?

共有1个答案

昝涛
2023-03-14

假设这是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转换()来显式声明列的数据类型,例如:

select col1=convert(varchar(35),'test') into #otherTable

假设您通过了从数据类型“VARCHAR”到“INT”的隐式转换是不允许的。如果您尝试以下内容,可能会发生您的下一次颠簸:

update #myTable set col2 = NULL

结果是您会看到类似于列的错误消息不允许空值。

与数据类型确定一样,赛贝斯(ASE)将尝试以几种不同的方式确定列的NULLability:

  • 如果为列分配了NULL的“值”(如示例中所示:col1=NULL),则ASE会将该列配置为允许NULL
  • 如果该列的值是从另一个表复制的,则源列的可空性将用于确定新列的可空性
  • 如果查询明确将列定义为可空(参见下面的示例),则该列将被配置为允许空
  • 如果数据库选项默认允许空值false(ASE默认设置),则列的空值性将设置为“not NULL”
  • 当一切都失败了
  • 如果数据库选项默认允许空值真值,则列的可空性将设置为“空”(可空)

显式定义列以允许空值的示例:

select col1 = convert(varchar(35) null,'test') into #otherTable
 类似资料:
  • 问题内容: 如何在执行Update语句时设置变量?我似乎无法弄清楚语法。 所以我想要下面这样的东西,但是它说语法是错误的: 问题答案: 这个有可能 :- 设置整数(不递增)

  • 我正在试用intellij,并且正在尝试进行一些swing开发。我遇到了一个在eclipse上从未遇到过的问题,我想知道我是否设置错了什么。 下面是我的驱动程序运行的GUI类: } 据我所知,我的run()方法非常简单。但是,在编译时,我收到的错误是: 无论出于什么原因,intellij自动创建的代码没有正确初始化JPanel,这就是它为空的原因。 我尝试在run内部实例化它(panel=new

  • 问题内容: 我不是SQL专家,但在iPhone应用程序中存在一个错误,其中UPDATE语句对数据库没有影响。我一直在为FireFox使用SQLlite管理器插件,通过反复修改和在db上运行UPDATE来尝试dbug。我还仔细运行了该语句,并使用SQL Validator进行了验证,该语句符合核心SQL标准。 您能发现以下给出的陈述有什么问题吗? 问题答案: SQLite以及Mozilla,Goog

  • 问题内容: 我想使用case语句更新表,查询是这样的… 您能告诉我正确的逻辑以使用case语句完成查询吗 问题答案: 您必须四处交换语法。case语句将应用于您要更新的每个值… 看来您实际上想要的是if语句。 希望能有所帮助

  • 问题内容: 我有一个很大的PostgreSQL表,可以通过Django访问。因为Django的ORM不支持窗口函数,所以我需要将窗口函数的结果作为常规列烘烤到表中。我想做这样的事情: 但是我明白了 有人可以建议替代方法吗?通过Django的.raw()方法传递窗口函数语法是不合适的,因为它返回RawQuerySet,它不支持其他ORM功能,例如我需要的.filter()。 谢谢。 问题答案: 错误

  • 有一个错误,其中登录的用户将尝试更新他们的帐户用户名,但遇到一个错误。在我的一生中,我无法弄清楚为什么有时(可能有1/20的用户遇到这种情况)找不到当前的用户。只有登录后,用户才能访问此页面。错误有: 投掷;//未处理的“错误”事件 TypeError:无法设置null的属性“username” 错误似乎发生在这里:user.username=req.body.username;