2013-01-19 27 views
11

ho già creato una sequenza:sequenza come valore predefinito per una colonna

create sequence mainseq as bigint start with 1 increment by 1 

Come faccio a usare questa sequenza come valore predefinito di una colonna?

create table mytable(
    id  bigint not null default mainseq  -- how? 
    code varchar(20) not null 
) 

risposta

20

si è rivelato essere abbastanza facile:

create table mytable (
    id  bigint not null constraint DF_mytblid default next value for mainseq, 
    code varchar(20) not null 
) 

o se la tabella è già stata creata:

alter table mytable 
add constraint DF_mytblid 
default next value for mainseq 
for id 

(grazie Matt Strom per la correzione!)

+1

Proprio come una piccola nota che potrebbe essere molto evidente per alcuni ... perché sta usando 'default', essa si applica solo se non si fornisce un valore o' null'. Gli utenti potrebbero comunque sovrascrivere il valore della sequenza automatica fornendo un valore nella loro query. –

+0

Esiste un modo per imporre l'utilizzo del valore predefinito? –

+0

@MattiasNordqvist che utilizza [identità] (https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property) –

8

L'istruzione ALTER non è completa. Ha bisogno di un'altra clausola FOR per assegnare il valore predefinito al campo desiderato.

ALTER TABLE mytable 
ADD CONSTRAINT DF_mytblid 
DEFAULT (NEXT VALUE FOR mainseq) FOR [id] 
1
create table users(
    u_id int identity(1,1) primary key, 
    u_type varchar(30) default 'member', 
    entrydate datetime default (getdate()), 
    updatedate datetime default (getdate()), 
    isactive bit default 1, 
    firstname varchar(30), 
    lastname varchar(30), 
    email varchar(50), 
    password varchar(50) 
) 
+0

E in che modo la risposta mostra l'utilizzo di una sequenza come valori predefiniti di colonna? – dreamca4er

+0

Questa non è una sequenza, è l'identità integrata. –

Problemi correlati