You can use CHAR or a VARCHAR as the column type, depending on if you want to have a fixed length or not.
Then just set it as the IDENTITY column.
For the auto-generation part, you have to do that your self.
You can do it either in a stored procedure or in a trigger that is fired before the row is inserted.
Either way you need to have a way to correctly increment the sequence number part of the string.
Basically what you are saying is that you want to have a key that consists of a prefix, such as TK-NO-, and a unique sequence number part with 3 digits, such as 000-999.
This design gives you only a 1000 unique numbers before you run out of keys, so maybe you need more digits or a way to change the prefix.
Another small issue is to rely on the number of rows inserted. What if you later on decide that you are going to allow rows to be deleted from the table?
Then you will end up with duplicates for sure.
A better way is to get the last inserted row, extract the numeric part of the primary key and increment by 1.
CREATE PROCEDURE AddRow(IN _someData VARCHAR)
BEGIN
SET @prefix = 'TK-NO-';
SET @currentPK = IDENT_CURRENT(‘tablename’);
SET @sequenceNo = CONVERT(INT, RIGHT(currentPK, 6)) + 1;
SET @newKey = CONCATE(@prefix, @sequenceNo);
END
See also this article
Custom Auto-Generated Sequences with SQL Server[
^]