sql-server - 使用 varchar 数据类型自动递增主键列

标签 sql-server

CREATE TABLE Persons
(
    P_Id varchar(6) NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    PRIMARY KEY (P_Id)
)

在这个表中P_Id是主键。我们希望在开始时使用默认值 (PN00) 生成 P_Id 的自动增量,同时仅插入 LastName 和 FirstName。例如:-PN001 表示第一个条目,PN002 表示第二个条目,PN003 表示第三个条目,依此类推。

最佳答案

唯一可行的解​​决方案是使用

  • ID INT IDENTITY(1,1) 列让 SQL Server 处理数值的自动递增
  • 一个计算的、持久的列,用于将该数值转换为您需要的值

所以试试这个:

CREATE TABLE dbo.Persons
  (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   P_ID AS 'PN' + RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED,
   .... your other columns here....
  )

现在,每次您在 Persons 中插入一行而不指定 IDP_ID 的值时:

INSERT INTO dbo.Persons(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)

然后 SQL Server 将自动且安全地增加您的 ID 值,并且 P_Id 将包含像 PN00001 这样的值、PN00002、……等等——自动、安全、可靠、无重复。

关于sql-server - 使用 varchar 数据类型自动递增主键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32331265/

相关文章:

mysql - 如何在sql中使用join连接两个表?

c# - 插入带有参数的多行 Sql Server

C# SQL - 表列枚举和 JOIN

c# - 使用 count() 优化 linq 查询

sql-server - SQL Server 的 printf

.net - 在sql server中管理大数据

sql-server - 是否可以修改 SQL Server Reporting Services 的 web.config 文件?

c# - 发布后找不到数据库

sql - IF/ELSE 取决于存储过程的结果

sql-server - 选择查询中使用的逗号分隔字段中的行数据