我已经创建了该表,并插入了以下值:
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列。因此,这是我想要获得的输出
Product_No
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”附近的语法不正确。
那么,我该如何解决呢?
如果提供适当的语法解决方案,那将真的很有帮助。
如果要创建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列和计算出的列说明合并到一个列中-这是不可能的。
IDENTITY
但是:即使有了这个,以及您的样本数据,这个查询:
仍然返回以下结果:
ID Product_No Product_Name ------------------------------ 1 PDT00001 Fish 2 PDT00002 Shrimp 3 PDT00003 Crab
但是该输出有什么 问题 呢?我不太了解您的情况为什么会这样?
如果您不想(或为该ID列创建),只需运行以下查询:
ID
SELECT Product_No, Product_Name FROM Product
得到这个结果:
Product_No Product_Name ------------------------------ PDT00001 Fish PDT00002 Shrimp PDT00003 Crab