【问题标题】:Auto computed column SQL Server自动计算列 SQL Server
【发布时间】:2018-03-15 20:40:18
【问题描述】:

我想更改一个表并添加一个列,该列是其他两列的总和,当我添加新数据时,此列是自动计算的。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    计算列规范的语法如下:

    column-name AS formula
    

    如果要将列值存储在数据库中,则应在语法中添加 PERSISTED 关键字,如下所示:

    column-name AS formula PERSISTED
    

    你没有提到一个例子,但如果你想添加列“sumOfAAndB”来计算 A 和 B 的总和,你的语法看起来像

    ALTER TABLE tblExample ADD sumOfAAndB AS A + B
    

    希望对您有所帮助。

    【讨论】:

    • 我会将PERSISTED 添加到您最后的ALTER TABLE.... 语句中。否则,将对该表中的每个 SELECT 重新计算总和 - 效率不高...
    • 嘿 Marc,我提到了 PERSISTED,但你是对的;我应该告诉他,既然总和是确定性的,他应该这样做。如果发帖人参考手册阅读如何正确操作会更好......
    【解决方案2】:

    我建议不要将此列添加到表中,而是使用View 来计算额外的列,然后从中读取。

    这里有一个关于如何在这里创建视图的教程:

    http://odetocode.com/Articles/299.aspx


    您的视图查询类似于:

     SELECT 
        ColumnA, ColumnB, (ColumnA+ColumnB) as ColumnC
      FROM 
        [TableName]
    

    【讨论】:

    • 谢谢老兄,经过长时间的尝试,终于找到了!命令是 ALTER TABLE my_table ADD my_column AS (column1+column2) 就是这样,伙计 thx ;)
    • 不用担心@Neuvill,但是我不确定您发布的脚本是否符合您的要求。如果对表进行任何更改,my_column 值将不会更新。
    • @Curt no iv 试试看,语法是正确的,每次我插入一行时,my_column 列都会自动更新,只是删除(column1+column2) 中的括号我忘了说
    【解决方案3】:

    您可以使用视图,但如果您不想在每次访问视图时产生计算值的成本,您可能希望使用 PERSISTED 计算值。

    例如

    CREATE TABLE T1 (
        a INT,
        b INT,
        operator CHAR,
        c AS CASE operator
            WHEN '+' THEN a+b
            WHEN '-' THEN a-b
            ELSE a*b
        END
        PERSISTED
    ) ;
    

    如果您使用的是 SQL Server,请参阅SQL docs

    【讨论】:

    • 我认为这不是我正在寻找的东西......但它很有趣,我想我有一天会使用它!谢谢老兄!
    • 和你标记为正确的答案基本一样,只是稍微复杂一点的例子。
    • 不同之处在于我们必须提到运营商。
    【解决方案4】:

    创建新表时如何创建计算列:

    CREATE TABLE PRODUCT
    (
           WORKORDERID INT NULL,
           ORDERQTY INT NULL,
    
           [ORDERVOL] AS CAST
           (
                  CASE WHEN ORDERQTY < 10 THEN 'SINGLE DIGIT' WHEN ORDERQTY >=10 AND ORDERQTY < 100 THEN 'DOUBLE DIGIT' 
                  WHEN ORDERQTY >=100 AND ORDERQTY < 1000 THEN 'THREE DIGIT' ELSE 'SUPER LARGE' END AS NVARCHAR(100)
           )
    
    )
    
    INSERT INTO PRODUCT VALUES (1,1),(2,-1),(3,11)
    
    SELECT * FROM PRODUCT
    

    【讨论】:

      【解决方案5】:

      UPDATE table_name SET total = mark1+mark2+mark3;

      首先认为你可以将所有数据插入到表中,然后你可以像这个表格一样更新表。

      //我希望对你有帮助

      【讨论】:

      • 先想你可以在列中添加日期,然后像这个表格一样取消表格的日期。我希望它对你有帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多