【问题标题】:Is it possible to concatenate a string to a sequence value and use as a column default value?是否可以将字符串连接到序列值并用作列默认值?
【发布时间】:2017-03-06 22:19:02
【问题描述】:

我想为序列中的列设置一个默认值,就像 here 所做的那样,但还要在序列前面添加一个值,以便保存在表中的值看起来像 P123。这可能吗?

【问题讨论】:

  • 字母总是P吗?无论如何,我认为您不能将序列保留为 int。我会根据您的序列列虚拟化另一列。
  • @scsimon,在这种情况下,是的,它总是“P”。通过虚拟化,您的意思是像计算列吗?我是否需要两列来执行此操作(一列用于序列,一列用于计算值)?或者看起来怎么样?
  • 两者都正确。序列列需要保持为 int,计算列将是该列和 P 的串联。类似于stackoverflow.com/a/24729386/6167855
  • @scsimon,我刚刚了解到我无法做到这一点,因为我们将不得不从另一个系统回填现有值。所以它需要是一个默认值,如果存在现有值,我们可以显式设置。
  • @scsimon,没关系。我在我的问题中重新阅读了该帖子,似乎由于该列仅使用序列值作为默认值,因此仍可以将显式值添加到该列,然后计算列将拾取它。

标签: sql-server sql-server-2014 tsql-sequence


【解决方案1】:

完全有可能。
从您链接的帖子中更改示例:

create sequence mainseq as bigint start with 1 increment by 1;

create table mytable (
    id      varchar(20) not null constraint DF_mytblid default 'p' + CAST(next value for mainseq as varchar(10)),
    code    varchar(20) not null
)

测试:

INSERT INTO MyTable (Code) VALUES ('asdf'), ('cvnb')

SELECT *
FROM MyTable

结果:

id  code
p1  asdf
p2  cvnb

【讨论】:

  • 所以我什至不需要计算列?不错。
猜你喜欢
  • 1970-01-01
  • 2019-07-27
  • 2022-01-12
  • 1970-01-01
  • 2019-10-29
  • 2012-11-20
  • 2021-03-27
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多