【问题标题】:Generating Random Number to autoincrement生成随机数以自动递增
【发布时间】:2018-03-28 23:39:12
【问题描述】:

我有一个数字格式如下 1500,插入记录后,我希望数字上升到 1501。

这是我的桌子:

CREATE TABLE QuoteTable2
(
    QuoteID int IDENTITY (1,1) NOT NULL
 , QNumber varchar(1500),

);

这是我的触发器:

create TRIGGER tr_no ON quotetable2
    AFTER INSERT
    AS

    BEGIN
      UPDATE QuoteTable2
      SET QNumber = inserted.QNumber +1
      FROM inserted 
      WHERE quotetable2.QuoteID = inserted.QuoteID;
    END
   GO

我的结果总是与下面的数字相同:

QuoteID          QNumber
1                1501
1                1501

如何修改触发器以每次递增 1?在示例中,quoteID 和 Qnumber 都相同 - 抱歉格式化

【问题讨论】:

  • QuoteID 值在某些时候有间隙。 QNumber 呢:您希望没有间隙还是与 QuoteID 相同?
  • 想通了!!

标签: sql sql-server triggers increment


【解决方案1】:

你可以试试下面的代码:

 ALTER TRIGGER tr_no ON quotetable2
    AFTER INSERT
    AS

    BEGIN
    DECLARE @COUNT INT = (SELECT COUNT(1) FROM quotetable2)
      UPDATE QuoteTable2
      SET QNumber = inserted.QNumber + @COUNT -1
      FROM inserted 
      WHERE quotetable2.QuoteID = inserted.QuoteID;
    END
   GO

我计算表上的行数并使用该值来获取增量,问候

【讨论】:

    【解决方案2】:

    您正在从插入的值更新值,即 1500,因此它始终为 1501。

    你需要从源表QuoteTable2而不是inserted获取值:

      UPDATE q
      SET q.QNumber = q.QNumber +1
      FROM QuoteTable2 as q 
      INNER JOIN inserted AS i ON q.QuoteID = i.QuoteID;
    

    我建议将该列声明为IDENTITY 列,以便它自动递增。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多