【问题标题】:Generate ID for duplicate values in sql server为sql server中的重复值生成ID
【发布时间】:2019-04-09 08:37:07
【问题描述】:

我发现以下链接为 SQL Server 中的重复项分配相同的 ID, 我的理解是没有 sql server 函数可以自动生成它,而不是在附加的链接中使用插入和更新查询,该语句是真的吗,如果是,那么如果有人将数据插入 MyTable 然后运行插入和更新,那么触发器是什么?从链接查询:

Assign identical ID to duplicates in SQL server

 INSERT INTO secondTable (word) SELECT distinct word FROM MyTable;
 UPDATE MyTable SET ID = (SELECT id from secondTable where MyTable.word = secondTable.word)

谢谢, S

【问题讨论】:

  • 您是否在 Google 上搜索过如何创建插入/更新触发器?
  • 是的,我用谷歌搜索了它,但没有找到任何东西或不明白如何申请我的案例。
  • 需要id栏吗?
  • 触发器将在插入/更新时执行代码,该代码将从插入/更新值中搜索表中的值并修改原始数据和新值。触发器并不特殊(嗯,只是一点点),您可以在触发器内做任何您想做的事情。触发器的特殊之处在于访问插入/更新的数据,因此您知道正在插入/修改哪些数据。

标签: sql sql-server


【解决方案1】:

这是你想要的吗?我想不出一种“自动”解决方案,只会增加新词的 Id。

CREATE TABLE MyTable (
    Id INT NOT NULL,
    Word NVARCHAR(255) NOT NULL
    PRIMARY KEY (Id, Word)); -- primary key will make it impossible to have more than one combination of word and id

DECLARE @word NVARCHAR(255) = 'Hello!';

-- Get existing id or calculate a new id 
DECLARE @Id INT = (SELECT Id FROM MyTable WHERE Word = @word);
IF(@id IS NULL) SET @Id = (SELECT MAX(Id) + 1 FROM MyTable);

INSERT INTO MyTable (Id, Word)
VALUES (@id, @word)

SELECT * FROM MyTable

如果由于某种原因不能将 id 和 word 作为组合主键,则可以使用唯一索引来确保只有一个组合

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2011-09-20
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多