【问题标题】:SQL Stored Procedure Insert value based on idSQL 存储过程根据 id 插入值
【发布时间】:2024-01-21 00:45:01
【问题描述】:

我想运行一个存储过程,它使用自己生成的 ID 在另一列但在同一行中填充一个值。

前:

表:IDReference

ID 是自动编号,Reference 是由ID-CURRENTDATE 组成的VARCHAR

因此,如果 ID 为 230,对于插入语句,Ref 应为 230-20130225

这可能吗,我该如何实现?

【问题讨论】:

  • 这似乎需要一个触发器。但要获得或多或少具体的建议,您可能应该澄清您使用的是什么 SQL 产品。
  • SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...诸如存储过程之类的东西是高度特定于供应商的 - 所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)......
  • 抱歉,我使用的是 SQL Server

标签: sql sql-server stored-procedures sql-insert


【解决方案1】:

如果您在 sql-server 上,您可以使用 computed column 执行此操作。

create table myTable ( 
    id int identity (1,1) not null,
    name varchar(50) not null,
    recordDate date default getdate(),
    reference  as ((convert(varchar,[id1],(0)) + '-') + convert(varchar,recordDate,(112)))
)

然后你的插入就像(或者你可以输入一个记录日期)

insert into myTable (name)
values ('xyz')

如果您无法更改表,请尝试(在存储过程中);

declare @recordId int
insert into myTable (name)
values ('xyz')

select @recordId = scope_identity()

update myTable set reference = convert(varchar, @recordId) + '-' +  
                               convert(varchar, getdate(), 112)
where id = @recordId

【讨论】:

  • 谢谢!完美运行!非常感谢:)