I have created this table and I inserted the following values:
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')
Then by using
SELECT *
FROM Product
I get the following results:
ID Product_No Product_Name
1 PDT00001 Fish
2 PDT00002 Shrimp
3 PDT00003 Crab
As you can see that ID is the primary key column .. not Product_No … I want Product_No
to be the primary key column here without requiring to create ID column. Therefore, this is the output I want to get with
SELECT *
FROM Product (with Product_No as the Primary Key):
Product_No Product_Name
-------------------------
PDT00001 Fish
PDT00002 Shrimp
PDT00003 Crab
So this is what I have tried:
CREATE TABLE Product
(
Product_No INTEGER IDENTITY(1,1) PRIMARY KEY ('PDT0000' + Product_No AS VARCHAR(10)),10),
Product_Name VARCHAR(50) NOT NULL
)
This is the following error I got:
Incorrect syntax near ‘PDT0000’.
So, how do I fix this ?
It would be really helpful if the appropriate syntax solution is provided.
Advertisement
Answer
If you want to make Product_No
the primary key – just use this SQL syntax:
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
)
Now your column Product_No
is the primary key for this table. You cannot combine the IDENTITY
value column with the computed column specification into a single column – that’s just not possible.
HOWEVER: even with this, and your sample data, this query:
SELECT *
FROM Product
still returns this result:
ID Product_No Product_Name
------------------------------
1 PDT00001 Fish
2 PDT00002 Shrimp
3 PDT00003 Crab
But what is wrong with that output?? I don’t quite understand why this is a problem in your case?
If you don’t want (or create for) the ID
column, just run this query:
SELECT Product_No, Product_Name
FROM Product
to get this result:
Product_No Product_Name
------------------------------
PDT00001 Fish
PDT00002 Shrimp
PDT00003 Crab