admin

如何为主键列创建自定义的自动生成的ID号?

sql

我已经创建了该表,并插入了以下值:

CREATE TABLE Product
(
     ID INTEGER IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
     Product_No AS RIGHT ('PDT0000' + CAST(ID AS VARCHAR(10)),10) PERSISTED,
     Product_Name VARCHAR(50) NOT NULL
)

INSERT INTO Product(Product_Name)
VALUES('Fish'), ('Shrimp'), ('Crab')

然后通过使用

SELECT * 
FROM Product

我得到以下结果:

ID  Product_No  Product_Name
1   PDT00001    Fish
2   PDT00002    Shrimp
3   PDT00003    Crab

如您所见,ID是主键列..不是Product_No …我想Product_No在这里成为主键列,而无需创建ID列。因此,这是我想要获得的输出

SELECT * 
FROM Product     (with Product_No as the Primary Key):

Product_No  Product_Name
-------------------------
PDT00001    Fish
PDT00002    Shrimp
PDT00003    Crab

所以这就是我尝试过的:

CREATE TABLE Product
(
     Product_No INTEGER IDENTITY(1,1) PRIMARY KEY ('PDT0000' + Product_No AS VARCHAR(10)),10),
     Product_Name VARCHAR(50) NOT NULL
)

这是我得到的以下错误:

“ PDT0000”附近的语法不正确。

那么,我该如何解决呢?

如果提供适当的语法解决方案,那将真的很有帮助。


阅读 177

收藏
2021-06-07

共1个答案

admin

如果要创建Product_No主键-只需使用以下SQL语法:

CREATE TABLE Product
(
     ID INTEGER IDENTITY(1,1) NOT NULL
          CONSTRAINT UC_Product_ID UNIQUE,
     Product_No AS RIGHT ('PDT0000' + CAST(ID AS VARCHAR(10)), 10) PERSISTED 
          CONSTRAINT PK_Product PRIMARY KEY CLUSTERED,
     Product_Name VARCHAR(50) NOT NULL
)

现在,您的列Product_No 该表的 主键 。您 不能
IDENTITYvalue列和计算出的列说明合并到一个列中-这是不可能的。

但是:即使有了这个,以及您的样本数据,这个查询:

SELECT * 
FROM Product

仍然返回以下结果:

ID  Product_No  Product_Name
------------------------------
1   PDT00001    Fish
2   PDT00002    Shrimp
3   PDT00003    Crab

但是该输出有什么 问题 呢?我不太了解您的情况为什么会这样?

如果您不想(或为该ID列创建),只需运行以下查询:

SELECT Product_No, Product_Name
FROM Product

得到这个结果:

Product_No  Product_Name
------------------------------
PDT00001    Fish
PDT00002    Shrimp
PDT00003    Crab
2021-06-07