Sql 将列数据类型从十进制(9,0)更改为十进制(15,0)

Sql 将列数据类型从十进制(9,0)更改为十进制(15,0),sql,teradata,Sql,Teradata,你能帮我解决这个问题吗(我没有在Teradata文档中找到它,这真的有点让人不知所措):我的表有这个列-禁止十进制(9,0),现在我想把它改为-禁止十进制(15,0)压缩0。-我怎么做?什么是压缩约束0。还是别的什么意思? 我希望这是可能的,而且我不必创建一个新表,然后从旧表复制数据。该表非常大-当我从该表中计算(*)时,我得到以下错误:2616个数字溢出发生在计算过程中ALTER table的语法图似乎不支持直接更改列的数据类型。(). 压缩0压缩零。Teradata支持多种不同类型的压缩 这

你能帮我解决这个问题吗(我没有在Teradata文档中找到它,这真的有点让人不知所措):我的表有这个列-禁止十进制(9,0),现在我想把它改为-禁止十进制(15,0)压缩0。-我怎么做?什么是压缩约束0。还是别的什么意思?
我希望这是可能的,而且我不必创建一个新表,然后从旧表复制数据。该表非常大-当我从该表中计算(*)时,我得到以下错误:2616个数字溢出发生在计算过程中

ALTER table的语法图似乎不支持直接更改列的数据类型。(). <代码>压缩0压缩零。Teradata支持多种不同类型的压缩

这里的数字溢出可能意味着您超出了整数的范围。要使该部分正常工作,请尝试转换为更大的数据类型。(执行此操作不需要更改列的数据类型。)


ALTERTABLE的语法图似乎不支持直接更改列的数据类型。(). <代码>压缩0压缩零。Teradata支持多种不同类型的压缩

这里的数字溢出可能意味着您超出了整数的范围。要使该部分正常工作,请尝试转换为更大的数据类型。(执行此操作不需要更改列的数据类型。)


不能使用
ALTER TABLE
将数据类型从
DECIMAL(9,0)
更改为
DECIMAL(15,0)
,因为它跨越了存储表中值所需的字节边界。对于Teradata 13.10,请参阅Teradata手册SQL数据定义语言详细主题第61-65页,了解有关使用
ALTER TABLE
更改列数据类型的更多详细信息。

您不能使用
ALTER TABLE
将数据类型从
DECIMAL(9,0)
更改为
DECIMAL(15,0)
因为它跨越了在表中存储值所需的字节边界。对于Teradata 13.10,请参阅Teradata手册SQL数据定义语言详细主题第61-65页,了解有关使用
ALTER TABLE
更改列数据类型的更多详细信息。

您提出了三个不同的问题:

  • 不能将列的数据类型从
    DECIMAL(9,0)
    更改为
    DECIMAL(15,0)
    。最好的方法是创建一个新列(new_BAN),从旧列中赋值,删除旧列,并将new_BAN重新命名为BAN)

  • 压缩0
    不是约束条件。这意味着从表中压缩“零”的值,从而节省磁盘空间

  • 您的
    计数(*)
    正在返回该错误,因为该表的行数超过2147483647行(整数的最大值)。将结果强制转换为BIGINT(如Catcall所示)


  • 我也同意,这些文档可能会非常多。但是要有耐心,只关注您的确切版本的SQL标题。它们确实写得很好。

    你问了三个不同的问题:

  • 不能将列的数据类型从
    DECIMAL(9,0)
    更改为
    DECIMAL(15,0)
    。最好的方法是创建一个新列(new_BAN),从旧列中赋值,删除旧列,并将new_BAN重新命名为BAN)

  • 压缩0
    不是约束条件。这意味着从表中压缩“零”的值,从而节省磁盘空间

  • 您的
    计数(*)
    正在返回该错误,因为该表的行数超过2147483647行(整数的最大值)。将结果强制转换为BIGINT(如Catcall所示)


  • 我也同意,这些文档可能会非常多。但是要有耐心,只关注您的确切版本的SQL标题。它们确实写得很好。

    所以基本上,您建议创建新表,并将数据从现有表传送到新创建的表中?没有其他方法了?您可以添加一个新列而不是一个新表,复制数据,删除旧列,然后重命名新列。(语法在DDL文档中。)我想我在Teradata用户论坛上看到过这样的讨论,即创建一个新表通常更快。所以基本上,您建议创建一个新表,并将现有表中的数据传输到新创建的表中?没有其他方法了?您可以添加一个新列而不是一个新表,复制数据,删除旧列,然后重命名新列。(语法在DDL文档中。)我想我已经在Teradata用户论坛上看到过讨论,他们说创建新表通常更快。嗨,鲍勃!谢谢你的回复。我喜欢关于添加一个新列并在该新列中复制数据的建议。我想知道的是,是否可以保持相同的列顺序,即我可以将新列放在旧列所在的位置,还是该列只能放在表的末尾?嗨,鲍勃!谢谢你的回复。我喜欢关于添加一个新列并在该新列中复制数据的建议。我想知道的是,是否可以保持相同的列顺序,即我可以将新列放在旧列所在的位置,还是该列只能放在表的末尾?
    select cast(count(*) as bigint) 
    from table_name;