I'd like to set a default value for a column from a sequence like what is done here, but also prepend a value in front of the sequence so the value saved in the table looks like P123. Is that possible?
            Asked
            
        
        
            Active
            
        
            Viewed 3,068 times
        
    6
            
            
        - 
                    would the letter always be P? Regardless, I don't think you can keep the sequence as an int. I'd virtualize another column based off your sequence columns. – S3S Mar 06 '17 at 22:21
- 
                    @scsimon, in this case, yes it'd always be "P". By virtualize, do you mean like a computed column? Would I need two columns to do that (one for the sequence and one for the computed value)? Or how would that look? – adam0101 Mar 06 '17 at 22:24
- 
                    correct on both. Sequence column would need to stay an int and the computed column would be a concatenation of this column and P. something like http://stackoverflow.com/a/24729386/6167855 – S3S Mar 06 '17 at 22:27
- 
                    @scsimon, I just learned that I won't be able to do that because we will have to back-fill existing values from another system. So it needs to be a default value that we can explicitly set if there's an existing value. – adam0101 Mar 06 '17 at 22:31
- 
                    1@scsimon, nevermind. I reread through that post in my question and it appears that since the column just uses the sequence value as a default, an explicit value can still be added to that column and then the computed column will pick it up. – adam0101 Mar 06 '17 at 22:41
- 
                    Oh nice, I did t see that – S3S Mar 06 '17 at 22:44
1 Answers
5
            It's totally possible.
Changing the example from the post you've linked to something like this:
create sequence mainseq as bigint start with 1 increment by 1;
create table mytable (
    id      varchar(20) not null constraint DF_mytblid default 'p' + CAST(next value for mainseq as varchar(10)),
    code    varchar(20) not null
)
Test:
INSERT INTO MyTable (Code) VALUES ('asdf'), ('cvnb')
SELECT *
FROM MyTable
Results:
id  code
p1  asdf
p2  cvnb
 
    
    
        Zohar Peled
        
- 79,642
- 10
- 69
- 121
 
    