【问题标题】:Is it possible to use identity value during insert?插入期间是否可以使用标识值?
【发布时间】:2018-01-23 13:19:58
【问题描述】:

假设我有下表:

ID Name Custom_Field
1  Alex   1_custom
2  Bob    2_somethingelse
.......

我可以在一个 sql 语句中进行插入吗?我找不到任何可以让我在插入时使用我的 ID 的功能。 IDINT IDENTITY(1,1) 我正在寻找这样的东西:

insert into table
values('Alex', ID_VALUE + '_custom')

【问题讨论】:

标签: sql sql-server sql-server-2016


【解决方案1】:

如果您总是需要像ID_custom 这样的字段值,您可以创建一个computed column

CREATE TABLE SomeTable
(
    [id] int identity, 
    [name] varchar(20),
    CustomField AS CAST(id AS varchar(10)) + '_custom'
);

虽然您不能在其中插入值(也不必这样做)。所以你的插入语句看起来像这样:

INSERT INTO SomeTable
    ([name])
VALUES
    ('Alex'),
    ('Bob')
;

这是一个 SQL Fiddle:http://sqlfiddle.com/#!18/10cac/1

【讨论】:

  • 以上是如何解决问题的??顺便提一句。你应该标记计算出来的col。保持不变。
  • @YogeshSharma 这个问题并不存在问题,我只是指出一种实现要求的方法。顺便说一句,是的,该列可以标记为 PERSISTED,但我不认为它总是必需的。这取决于用例。
  • 最好的方法是计算列,我同意@Nisarg。坚持与否。由于无法更新 Identity 列,因此计算列中的值将始终与 identity 平行。
【解决方案2】:

你可以得到最后一个身份并加1。这样的东西

insert into table
 values('Alex', cast((select max(ID_VALUE )+1 from table) as nvarchar(10)) + '_custom')

sql server中有SCOPE_IDENTITY()函数,但只能在insert语句后使用。

【讨论】:

猜你喜欢
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2021-08-05
相关资源
最近更新 更多