【问题标题】:SQL Insert Function (Insert incremental value) [duplicate]SQL插入函数(插入增量值)[重复]
【发布时间】:2016-04-15 07:25:35
【问题描述】:

我想在插入函数上添加增量值。我尝试了以下代码,但无法正常工作。我想每次将COLUMN1 增加 1。COLUMN1 不是键列。

@var=0;
INSERT INTO TABLE_A (COLUMN1,COLUMN2,COLUMN3,COLUMN4) 
       SELECT @var++,COLUMN6,COLUMN7,COLUMN8 
       FROM TABLE_B;

有什么想法吗?

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    您可以使用ROW_NUMBERCOLUMN1 生成顺序值:

    INSERT INTO TABLE_A (COLUMN1,COLUMN2,COLUMN3,COLUMN4) 
    SELECT
        ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) - 1,
        COLUMN6,
        COLUMN7,
        COLUMN8 
    FROM TABLE_B;
    

    【讨论】:

    • 但我想要一个独特的价值!第二次插入时会发生什么?
    • 那么这将不起作用。请改用IDENTITY 列。
    • 或将-1 替换为+ (SELECT MAX(COLUMN1) FROM TABLE_B)。但这可能会给并发查询带来问题。
    【解决方案2】:

    您可以尝试将该列设为IDENTITY 列。如果它是现有列,那么您可以像这样添加它:

    ALTER TABLE (TABLE_A) ADD NewColumn INT IDENTITY(1,1)
    
    ALTER TABLE (TABLE_A) DROP COLUMN COLUMN1
    
    sp_rename 'TABLE_A.NewColumn', 'COLUMN1', 'COLUMN'
    

    然后简单地做喜欢

    INSERT INTO TABLE_A (COLUMN2,COLUMN3,COLUMN4) 
    SELECT
        COLUMN6,
        COLUMN7,
        COLUMN8 
    FROM TABLE_B;
    

    所以现在您不必在插入时提供COLUMN1。每当向表中插入新行时,它将自动填充,并且增量为 1。

    【讨论】:

    • 在 SQL Server 2012 中无法识别 sp_rename 函数
    • @user2242558:- 您已将您的问题标记为 SQL Server 2008。sp_rename 也适用于 SQL Server 2012,msdn.microsoft.com/en-in/library/ms188351(v=sql.110).aspx
    • 误加了2008!对此我很抱歉!
    • @user2242558:- 正如我所链接的,它也适用于 SQL Server 2012。
    • 试过但不工作!它总是给 COLUMN1=1
    【解决方案3】:

    您也可以为此使用row_number() 函数。将row_number 添加到变量中。

    @var=0;
    INSERT INTO TABLE_A (COLUMN1,COLUMN2,COLUMN3,COLUMN4) 
           SELECT @var + row_number (),COLUMN6,COLUMN7,COLUMN8 
           FROM TABLE_B;
    

    将变量初始化为所需的起始编号。抱歉,如果我用手机发帖,会很短。

    希望这会有所帮助。

    【讨论】:

    • 请。添加一个关于你的正确答案的例子
    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2019-11-07
    • 2018-12-19
    • 2019-11-17
    • 1970-01-01
    • 2013-04-12
    • 2017-09-24
    相关资源
    最近更新 更多