3.122 messaggi dal 16 maggio 2002
Vorrei sapere innanzi tutto come posso creare un campo autoincrementante in una tabella di un database SQL Server. Poi vorrei sapere se e come posso fare (da database, non da applicazione) ad usare l'auto incremento solo per alcuni record della tabella.
Mi spiego meglio: io ho una tabella con una chiave composta, ovvero un campo interno di tipo INT (numero) e un campo VARCHAR (codice) con un vincolo di FK su un'altra tabella. Io vorrei auto incrementare il campo "numero" all'interno di un certo "codice"; ad esempio, nella tabella posso avere tanti record con numero=2, ma ovviamente il campo "codice" e' diverso (altrimenti non sarebbe chiave). Vorrei che, alla prima istanza del codice "abcd" venisse associato numero=1, poi alla seconda numero=2, se poi viene inserito il codice "efgh" allora numero=1...
Spero che abbiate capito, per completezza vi scrivo anche lo schema relazionale delle due tabelle

OFFERTA (codice)
ORDINE (codice, numero, data)
FK: codice REFERENCES OFFERTA

(ho sottolineato i campi della chiave)
Modificato da Raynor il 23 aprile 2003 11.00 -

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
72 messaggi dal 21 settembre 2002
1) mi pare improbabile che tu possa dichiarare in una stessa tabella più di un campo che si autoincrementa quindi, per risolvere il tuo problema, dovresti ristrutturare il database in maniera diversa e mettere i record che seguono diversa numerazione di autoincremento in altre tabelle.
2) per dichiarare un campo come autoincremento si può utilizzare l'interfaccia SQLEnterprise Manager (insomma quella solita);
a) si apre la tabella in modalità design;
b) si seleziona il campo che deve avere l'autoincremento;
c) il tipo dati dello stesso che sia almeno int;
d) si toglie il check dalla casella allows null (non si può permettere il valore nullo.... e che dianime sennò che contatore è?)
e)si chekka (orribile) la casella relativa ad identity e di default lui piazza identity seed ed identity autoincrement a 1 (praticamente parte da uno e procede per step di uno)
f) meglio sarebbe fare diventare questo campo anche chiave primaria (click sulla chiave)
g) chiudere salvando la struttura della tabella (click su icona discehtto) e servire ben caldo.

chissà se sono stato chiaro.....
3.122 messaggi dal 16 maggio 2002
Sì, sei stato chiaro, ma io non uso enterprise manager per interfacciarmi al db, meglio il query analizer. Quale sarebbe la sintassi per costruire un campo auto incrementante con la CREATE TABLE?

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
72 messaggi dal 21 settembre 2002
Vediamo un po'....
supponiamo di volere creare una tabella detta Anagrafica in cui c'è un campo matricola (che vogliamo incrementare) e un campo cognome.
La sintassi dovrebbe + o - essere questa:
CREATE TABLE [dbo].[Anagrafica] (
[matricola] [int] IDENTITY (1,1) NOT NULL,
[cognome] [varchar] (50) NULL
) ON [PRIMARY]

Ovviamente ho supposto che il numero massimo delle matricole stia entro un INTeger e che il cognome, non obbligatorio sennò NOT NULL, sia variabile stringa massimo di 50 caratteri.
dbo sta ad indicare il prorietario della tabella

Fammi sapere....

Modificato da ram60 il 02 maggio 2003 18.48 -
3.122 messaggi dal 16 maggio 2002
Grazie ram, funziona alla grande.
Ho una domanda: qual'è la funzione della clausola ON PRIMARY alla fine della query?
Sai aiutarmi anche sulla questione degli utenti? Il post è questo :)

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
72 messaggi dal 21 settembre 2002
Indica dove andare a memorizzare il filegroup.
Puoi pure ometterla e ci pensa sql server a trovare la migliore posizione(!!!)
Per il resto, devo studiarci un po'....

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.