【问题标题】:How to Change datatype of a Column in a temporary table in SQL如何在 SQL 中更改临时表中列的数据类型
【发布时间】:2012-06-27 01:10:48
【问题描述】:

有没有办法在将值保存到临时表中的同时更改(增加)列的数据类型?

SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
INTO #matCalc
FROM TABLEA A 
INNER JOIN TABLEB 
ON A.ID_NO = B.ID_NO

我们在实际查询中进行了更大的计算。当我们执行存储过程时,我们得到一个错误“将数字转换为数字数据类型的算术溢出错误”。

非常感谢任何解决方案。

谢谢。

【问题讨论】:

    标签: sql-server tsql temp-tables


    【解决方案1】:

    将临时表用作:

    使用适当的数据类型,例如您可能想要的 NUMERIC(18,2) 总计

    DECLARE @TempTable TABLE(
    ID BIGINT NULL,
    TOTAL BIGINT NULL
    )
    
    DELETE FROM @TempTable
    INSERT INTO @TempTable
    SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
    FROM TABLEA A 
    INNER JOIN TABLEB 
    ON A.ID_NO = B.ID_NO
    

    【讨论】:

    • 那不是临时表——它是一个表变量
    • @shakir 那么我可以类似地创建一个临时表并使其工作还是有一种动态的方式来进行这种转换?
    • @Ranjith :您始终可以创建一个临时表,并且进行动态转换是我的新知识。去看看提问者标记的答案。它做你想做的事。
    【解决方案2】:

    只需将数字显式转换为更大的类型。我以 18,2 为例,但我不知道您的数据,因此不同的精度/比例可能更适合您:

    SELECT TableA.ID_NO, 
      SUM(CONVERT(DECIMAL(18,2), TABLEA.COST) * TABLEB.QTY) as TOTAL
    INTO #matCalc
    FROM TABLEA A 
    INNER JOIN TABLEB 
    ON A.ID_NO = B.ID_NO;
    

    【讨论】:

    • 我想将 Text 数据类型转换为 char 或 varchar。我也这样做,但它给出了一个错误。
    • @lazzy_ms 我看不到您要做什么或遇到什么错误。也许您想搜索错误消息,如果找不到任何内容,请根据这些细节创建您自己的问题。
    【解决方案3】:

    试试这个

    Create Table #matCalc(
    ID BIGINT NULL,
    TOTAL BIGINT NULL
    )
    
    INSERT INTO #matCalc
    SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
    FROM TABLEA A 
    INNER JOIN TABLEB 
    ON A.ID_NO = B.ID_NO
    

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2010-10-12
      • 1970-01-01
      • 2021-01-21
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多