【发布时间】:2022-01-11 07:42:45
【问题描述】:
我有一个加密的标量值函数,它基于当前时间为表生成唯一 ID。让我们调用函数 dbo.GenerateRecID
我在 SQL Server 中有一个 INSERT 查询,然后调用此函数来插入表的唯一记录 ID。
将此表命名为 Contacts,其中包含以下列:
RecID varchar(15)
Name varchar(20)
Age varchar(50)
我想像这样从另一个名为 Users 的表中插入 Contacts
INSERT INTO Contacts (RecID,Name,Age) values (SELECT dbo.GenerateRecID(),UserName,UserAge FROM USERS)
问题在于,带有 dbo.GenerateRecID() 函数(这是软件为我们提供的加密函数,因此我无法更改)的 INSERT 太快了。因为它每毫秒被调用多次,所以它生成相同的 ID,所以我在插入时得到了重复的值。
有没有办法为每个插入的行创建一个延迟,以使函数生成多个 ID 并避免这个问题(就像编程中的 for each 和 sleep 一样)?或者作为替代方案,有没有办法使用 try 和 catch 来检查是否插入了重复项并再次调用该函数?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: sql sql-server tsql