Google Gruppi non supporta più i nuovi post o le nuove iscrizioni Usenet. I contenuti storici continuano a essere visibili.

Problema di cancellazione righe DBASE.

196 visualizzazioni
Passa al primo messaggio da leggere

Moreno Bondi [MCP]

da leggere,
23 set 2005, 03:36:3123/09/05
a
Buongiorno a tutti voi del NG.

La presente per sottoporre alla vostra attenzione quanto segue, sperando di
ottenere qualche aiuto circa una situazione che, purtroppo, è molto
delicata.

Passo al punto.

AMBIENTE DI RETE:

* SQL SRV 2000 SP4 su WinServer 2003 Standard.
* Clienti TUTTI con WXP SP2
* Dominio AD W 2003 perfettamente funzionante.
* Autenticazione SQL in MIXED MODE

Circa due giorni fa è stata fatta una migrazione ad una nuova release di una
applicazione che PRIMA si appoggiava, come DBASE, al vecchio ANYWHERE SYBASE
6.0 mentre ora tutto il DBASE è stato, ovviamente, migrato a SQL 2000.

Nessun problema, migrazione perfetta, prestazioni eccellenti (una
elaborazione che prima impiegava 60 minuti adesso ne impiega circa 8).

A questo punto, però, nasce un problema di questo tipo.

Svariati utenti all'interno della rete usavano (quando ancora era in
versione SYBASE) questo DBASE con ACCESS 97 e ACCESS 2003, con connessione
effettuata attraverso ODBC.

Attraverso questa configurazione, il funzionamento era perfetto; quindi
TUTTO andava a buon fine (inserimenti, query di eliminazione, etc. etc.).
Dopo la migrazione del database, rilanciando le elaborazioni che prima
funzionavano perfettamente, ci siamo accorti che finchè si fanno inserimenti
in CODA al database tutto funziona bene e non ci sono problemi, nel momento
però in cui si lanciano QUERY DI ELIMINAZIONE (quindi query che vanno a
selezionare specifiche righe da cancellare o comunque gruppi consistenti di
righe che soddisfano una ben precisa condizione) inesorabilmente esce una
finestra di ACCESS contenente il seguente messaggio:

>>>> "Per l'operazione è necessaria una query aggiornabile" <<<<

e non siamo più in grado di eseguire l'operazione.

Come prima mossa, ho verificato innanzitutto le autorizzazioni al database.
All'utente specifico ho dato autorizzazioni:

* PUBLIC
* DB_OWNER

tuttavia nonostante questo non si risolve nulla.

Chiaramente la connessione è fatta con ODBC.

Uno sviluppatore di una azienda esterna presente dal cliente assieme a me (e
che lavora con una loro applicazione su questo dbase), ha affermato che
questo che si verifica è un limite intrinseco dell'ODBC.
Quindi, a suo dire, SQL non esegue l'azione perchè "...non sa bene che
record andare a prendere dal momento che ACCESS non riesce a costruire e a
passare un ID univoco del record usando più di DIECI campi perchè il suo
massimo è DIECI".

Per questo, ha suggerito di "riscrivere completamente" (mammamia!!!) tutte
le procedure e, eventualmente, di aggiungere una colonna al DBASE su SQL che
contenga una "stringa" formata dall'unione di tutti gli altri campi! (in
pratica raddoppio il DBASE!).

Ora, benchè si stia studiando anche questa possibilità, vorrei però prima
capire se esiste un metodo un po' meno drastico per risolvere questo
problema.
Ripeto che quando si usava ANYWHERE 6.0 non ha mai dato nessun errore.

Spero di essere stato sufficientemente chiaro, purtroppo sono un sistemista
certificato Microsoft ma sulla parte infrastrutturale, e non conosco molto
SQL SRV.

Ringrazio in anticipo tutti coloro che vorranno dare un contributo.

Saluti


--
Moreno Bondi - moreno...@gmail.com
Microsoft Certified Professional (MCP) - Windows Server 2003

= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This posting is provided "AS IS" with no warranties
and confers no rights.

Le informazioni fornite in questo messaggio sono fornite
senza vincolo di garanzia e senza responsabilità alcuna
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =


IH870

da leggere,
23 set 2005, 04:43:1523/09/05
a
"Moreno Bondi [MCP]" <moreno...@gmail.com> wrote in message
news:uv$rFGBwF...@TK2MSFTNGP10.phx.gbl...

>
>>>>> "Per l'operazione è necessaria una query aggiornabile" <<<<
> e non siamo più in grado di eseguire l'operazione.
>

io credo che possa aiutare che tu passassi il comando UPDATE dopo averlo
"intercettato" usando il Profiler. [Lancialo con tutti i default, vedrai
che prima o poi passa anche la tua query].

> ACCESS non riesce a costruire e a passare un ID univoco

Ma l'applicazione è scritta in access?
E se brutalmente apri una tabella (sempre da access intendo) e cancelli un
record cosa succede?

> contenga una "stringa" formata dall'unione di tutti gli altri campi!

potresti anche inserire un ID univoco generato da SQLServer con [IDENTITY]


Fulvio Canepari

da leggere,
23 set 2005, 05:00:5123/09/05
a
Ciao Moreno,

>>>>> "Per l'operazione è necessaria una query aggiornabile" <<<<
>>>>>

Sicuro che le tabelle abbiano una chiave primaria?
Bye


Moreno Bondi [MCP]

da leggere,
23 set 2005, 05:07:4623/09/05
a
> io credo che possa aiutare che tu passassi il comando UPDATE dopo averlo
> "intercettato" usando il Profiler. [Lancialo con tutti i default, vedrai
> che prima o poi passa anche la tua query].

Come devo fare?
Porta pazienza ma questo è un mondo abbastanza nuovo per me..

>
>> ACCESS non riesce a costruire e a passare un ID univoco
>
> Ma l'applicazione è scritta in access?

No, le tabelle sono già presenti e pronte nel DBASE SQL.

Con ACCESS mi collego alla tabella (tramite ODBC), tutto va perfettamente i
dati si vedono benissimo, creo una QUERY con i suoi criteri, la query
restituisce i dati selezionati correttamente, poi la salvo in ACCESS come
"QUERY di eliminazione" in locale, ma quando la eseguo mi esce l'errore di
cui sopra.

> E se brutalmente apri una tabella (sempre da access intendo) e cancelli un
> record cosa succede?

Nella riga di STATO in basso esce il messaggio: "Impossibile eliminare il
record. I dati sono di sola lettura."

>
>> contenga una "stringa" formata dall'unione di tutti gli altri campi!
>
> potresti anche inserire un ID univoco generato da SQLServer con [IDENTITY]

OPS!...si, è vero...ma questo l'applicazione ORIGINARIA che mi popola i dati
della tabella non lo prevede.
Se anche lo genero io poi l'applicazione che ci lavora sopra (scusa, come
applicazione intendo il programma scritto dalla software-house GRUPPO PRO
che mi popola questo dbase)

Grazie

Moreno Bondi [MCP]

da leggere,
23 set 2005, 05:15:4523/09/05
a

"Fulvio Canepari" <fulvio.canep...@BlaBlaBla-fastwebnet.it> ha
scritto nel messaggio news:5d7abedc17898...@news.microsoft.com...

Ciao Fulvio, e grazie per la risposta!

No, non credo che le tabelle abbiano una chiave primaria.
In pratica ogni record che viene creato è univoco in sè ma non ha un campo
che ne permette di garantire la vera univocità.
La vera univocità l'avrei sei creo una stringa composta dal concatenamento
dei valori presenti in tutti i campi del record.

Mi lascia però un po' perplesso il fatto che quando l'utente (con diritti
db_owner) apre da ACCESS (attraverso ODBC) la tabella presente nel dbase SQL
e naviga fra i dati, se tenta di cancellare manualmente UNA riga non glielo
lascia fare e nella barra di stato in basso di Access appare il messaggio in
grigio che mi dice che è impossibile cancellare e che i dati sono di sola
lettura.

Infatti è disabilitato anche il tasto " >*" in Access in basso a fianco
delle frecce per la navigazione nei record che, invece, sono abilitate.

Molte grazie.

Moreno

Lorenzo Benaglia

da leggere,
23 set 2005, 05:22:0223/09/05
a
Moreno Bondi [MCP] wrote:
> No, non credo che le tabelle abbiano una chiave primaria.

Ciao Moreno,

Per aggiornare le tabelle SQL Server occorre definire una PRIMARY KEY o un
indice UNIQUE.
Leggi questo articolo della Knowledge Base:

"ACC2000: Remote ODBC Tables Are Read-Only Without a Unique Index"
http://support.microsoft.com/default.aspx?scid=kb;en-us;209807

> Molte grazie.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

IH870

da leggere,
23 set 2005, 05:29:2823/09/05
a
"Moreno Bondi [MCP]" <moreno...@gmail.com> wrote in message
news:u7E4F5Bw...@TK2MSFTNGP12.phx.gbl...
> Come devo fare?

è un programma della suite di sqlserver.
controlla sul server nel menu e lo troverai
lo lanci, poi fai:
- file, new, trace
- ti autentichi al db
- sulla finestra "trace properties" confermi cliccando su Run

Profiler da questo momento intercetta e visualizza molte delle operazioni
eseguite dal motore db. Ciò che ti interessa nella colona EventClass sarà
marcato SQL:BatchCompleted

>
> Nella riga di STATO in basso esce il messaggio: "Impossibile eliminare
> il record. I dati sono di sola lettura."

E se lo fai da Enterprise manager? (Tasto dx sulla tabella, Open Table)
se succede la stessa cosa è un problema di disegno dati (ma perché non
capita con sybase?)
se non succede un problema ODBC. che driver hai usato nel dsn? mdac sul
client? service pack di sqlserver?

>> potresti anche inserire un ID univoco generato da SQLServer con
>> [IDENTITY]
>
> OPS!...si, è vero...ma questo l'applicazione ORIGINARIA che mi popola i
> dati della tabella non lo prevede.

possibilità:
aggiungi un campo identity [ID] che è automatico
cambi nome a tutte le tabelle.
fai viste con i nomi originali ed escludi l'ID
provi a vedere se tutto funziona :)


Moreno Bondi [MCP]

da leggere,
23 set 2005, 05:33:3123/09/05
a

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3phvprF...@individual.net...

> Ciao Moreno,
>
> Per aggiornare le tabelle SQL Server occorre definire una PRIMARY KEY o un
> indice UNIQUE.
> Leggi questo articolo della Knowledge Base:
>
> "ACC2000: Remote ODBC Tables Are Read-Only Without a Unique Index"
> http://support.microsoft.com/default.aspx?scid=kb;en-us;209807
>

Ciao Lorenzo, e grazie davvero per il tuo post!

Ho letto l'articolo, perdona la mia ignoranza in SQL (se parliamo di creare
infrastrutture con siti AD e domini vari sono a nozze ma SQL proprio lo
conosco poco) ma come devo fare per fare esattamente quello che dice
l'articolo?

E' una operazione lunga che modifica il DBASE?

Mi basta far esequire quell'operazione una volta per tutte?

Se faccio domande banali porta pazienza!

Grazie ancora!

Ciao.

Moreno


Lorenzo Benaglia

da leggere,
23 set 2005, 05:53:2723/09/05
a
Moreno Bondi [MCP] wrote:
> Ho letto l'articolo, perdona la mia ignoranza in SQL (se parliamo di
> creare infrastrutture con siti AD e domini vari sono a nozze ma SQL
> proprio lo conosco poco) ma come devo fare per fare esattamente
> quello che dice l'articolo?

Ciao Moreno,

devi semplicemente individuare una colonna o un insieme di colonne (occhio a
non esagerare con il numero ma sopprattutto con le dimensioni in bytes) che
identifichino univocamente una riga nelle tabelle e definire su di essa/e un
constraint PRIMARY KEY oppure un indice UNIQUE.
In questo caso sarebbe più opportuno utilizzare il constraint PRIMARY KEY
perché logicamente sono i constraints che definiscono i vincoli, mentre gli
indici sono strutture che servono per velocizzare l'accesso ai dati (anche
se internamente SQL Server implementa una PRIMARY KEY con un indice UNIQUE
:-D).

Se per caso non esistono delle chiavi naturali, potresti aggiungere una
colonna numerica con l'attributo IDENTITY, ovvero una colonna il cui valore
si autoincrementa ad ogni inserimento.
Questa modifica è più invasiva, nel senso che se per caso le tue query
eseguono una SELECT * ti vedrai restituire anche la colonna identity. Se la
cosa non "disturba", procedi tranquillamente :-)
In fase di INSERT la colonna si autoincrementerà quindi le attuali query di
inserimento continueranno a funzionare correttamente.

Per modificare la struttura delle tabelle, aggiungendo il constraint PRIMARY
KEY (ed eventualmente la colonna IDENTITY), puoi aprire una sessione di
Query Analyzer ed eseguire il comando ALTER TABLE.

Sui Books Online troverai tutti i dettagli:

"ALTER TABLE"
http://msdn.microsoft.com/library/en-us/tsqlref/ts_aa-az_3ied.asp

> E' una operazione lunga che modifica il DBASE?

Dipende dalla mole dei dati, ma in genere non è una operazione "lunga" in
termini di tempo.

> Mi basta far esequire quell'operazione una volta per tutte?

Si, anche se poi divresti prevedere un piano di manutenzione per
deframmentare gli indici... ma qui il discorso si ampia un pochino... Inizia
a risolvere il primo problema, poi eventualmente ne riparleremo più avanti
:-)

> Se faccio domande banali porta pazienza!

Figurati.

> Grazie ancora!

Moreno Bondi [MCP]

da leggere,
23 set 2005, 06:23:3923/09/05
a

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3pi1knF...@individual.net...

>> Mi basta far esequire quell'operazione una volta per tutte?
> Si, anche se poi divresti prevedere un piano di manutenzione per
> deframmentare gli indici... ma qui il discorso si ampia un pochino...
> Inizia
> a risolvere il primo problema, poi eventualmente ne riparleremo più avanti
> :-)
>
>> Se faccio domande banali porta pazienza!
> Figurati.
>
>> Grazie ancora!
> Prego.
>
> Ciao!
>
> --
> Lorenzo Benaglia
> Microsoft MVP - SQL Server
> http://blogs.dotnethell.it/lorenzo/
> http://italy.mvps.org
>

Ok, Lorenzo!

Farò queste prove.
Per sicurezza, ho pensato di fare una copia esatta del database, ricostruire
la condizione e verificare prima il tutto sul database di test e non su
quello di produzione.
Per questo, ho creato un backup con estensione ".bak" che mi contiene il
file.

Porta pazienza l'ultima volta; adesso con il file di backup come posso fare
per creare da questo un secondo database denominato "TEST" uguale
esattamente al primo?

Ti devo una cena.

Moreno


Lorenzo Benaglia

da leggere,
23 set 2005, 06:34:2423/09/05
a
Moreno Bondi [MCP] wrote:
> Per sicurezza, ho pensato di fare una copia esatta del database,
> ricostruire la condizione e verificare prima il tutto sul database di
> test e non su quello di produzione.
> Per questo, ho creato un backup con estensione ".bak" che mi contiene
> il file.

Ottima idea ;-)

> Porta pazienza l'ultima volta; adesso con il file di backup come
> posso fare per creare da questo un secondo database denominato "TEST"
> uguale esattamente al primo?

Per effettuare il ripristino di un backup devi ricorrere al comando T-SQL
RESTORE DATABASE.
Nel tuo caso devi effettuare il RESTORE specificando un nuovo nome per il
database ed un nuovo percorso per i files fisici del database originale in
modo che tu possa lavorare in tutta tranquillità su una copia del database.

Ti riporto pari pari l'esempio che trovi sui Books Online nel paragrafo
"RESTORE" http://msdn.microsoft.com/library/en-us/tsqlref/ts_ra-rz_25rm.asp
:

E. Make a copy of a database using BACKUP and RESTORE

This example uses both the BACKUP and RESTORE statements to make a copy of
the Northwind database. The MOVE statement causes the data and log file to
be restored to the specified locations. The RESTORE FILELISTONLY statement
is used to determine the number and names of the files in the database being
restored. The new copy of the database is named TestDB. For more
information, see RESTORE FILELISTONLY.

BACKUP DATABASE Northwind
TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY
FROM DISK = 'c:\Northwind.bak'
RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'
WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'

> Ti devo una cena.
Se me ne offri anche 2 non mi offendo :-P

Moreno Bondi [MCP]

da leggere,
23 set 2005, 06:41:0823/09/05
a

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3pi41gF...@individual.net...

>> Ti devo una cena.
> Se me ne offri anche 2 non mi offendo :-P
>
> Ciao!
>
> --
> Lorenzo Benaglia
> Microsoft MVP - SQL Server
> http://blogs.dotnethell.it/lorenzo/
> http://italy.mvps.org
>

Vada per due cene!! ;-)

Perň ti prego, dimmi che posso farlo anche dall'interfaccia grafica di
Enterprise Manager....non voglio combinare casini...

Moreno


Moreno Bondi [MCP]

da leggere,
23 set 2005, 06:50:3423/09/05
a

[cut]

...ho fatto un'altra cosa...

...ho stoppato il servizio SQL, ho copiato pari pari i file .MDF e .LDF in
un'altra directory....

...ho fatto male?

...adesso dici che posso aprire un nuovo dbase associandolo a questi file
alternativi?

...non è che c'è qualche riferimento al DB "buono"?

M.


Lorenzo Benaglia

da leggere,
23 set 2005, 08:31:2623/09/05
a
Moreno Bondi [MCP] wrote:
> Però ti prego, dimmi che posso farlo anche dall'interfaccia grafica di

> Enterprise Manager....non voglio combinare casini...

Scusa, ero a pranzo :-)
Allora in Enterprise Manager seleziona i menu Tools, Restore Database e ti
apparirà una dialog box.
Specifica il nuovo nome del database, seleziona l'option button From device,
premi il bottone Select Devices..., fai click su Add..., specifica il nome
del file di backup, OK, OK, seleziona il tab Options e specifica nella
colonna "Move to physical file name" il nuovo percorso/nome dei files .mdf e
.ldf, infine premi OK per fare partire il restore.

Uhhhh.... che fatica, non credi che sia molto più immediato scrivere in
Query Analyzer una banale:

RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'
WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'

Che ne dici? ;-)

Moreno Bondi [MCP]

da leggere,
23 set 2005, 08:48:3123/09/05
a

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3piasvF...@individual.net...

...Guarda...non posso che darti ragione....

...mi sembra di vedere me quando maneggio in Active Directory da riga di
comando....

...solo che, almeno, da interfaccia grafica capisco a grandi linee la cosa
pur non conoscendo troppo l'ambiente mentre da riga di comando se faccio un
qualche guaio me ne accorgo meno facilmente...

...però devo dire che SQL mi affascina.....molto....

...lo terrò in seria considerazione per una delle mie prossime
certificazioni.... ;-)))

...ok, vado.....agisco....e ti so dire....


Non posso far altro che ringraziarti ancora.

Saluti per ora!

M.

Lorenzo Benaglia

da leggere,
23 set 2005, 08:52:0023/09/05
a
Moreno Bondi [MCP] wrote:
> ...ho stoppato il servizio SQL, ho copiato pari pari i file .MDF e
> .LDF in un'altra directory....
>
> ...ho fatto male?

No, questa è un'altra strada, l'imporetante è che prima di effettuare la
copia ti ricordi di fermare il servizio MSSQLServer oppure effettuare il
detach del database utilizzando la stored procedure di sistema sp_detach_db.

> ...adesso dici che posso aprire un nuovo dbase associandolo a questi
> file alternativi?

Si, ma prima devi "riattaccare" il database cambiandone il nome.
Ad esempio, ho stoppato SQL Server copiando i files Northwnd.mdf e
Northwnd.ldf in C:\.
A questo punto ho aperto una sessione di Query Analyzer con un account
sysadmin (il mio l'accout di dominio, ma andrebbe benissimo sa o
l'administrator locale della macchina) ed ho eseguito il seguente script:

USE master
GO

EXEC sp_attach_db
@dbname = N'NorthwindCopy',
@filename1 = N'c:\Northwnd.mdf',
@filename2 = N'c:\Northwnd.ldf'
GO

Come vedi ho utilizzato la stored procedure di sistema sp_attach_db per
ricollegare la copia dei files del database Northwind in un nuovo database
chiamato NorthwindCopy.

Per maggiori info:

"sp_attach_db"
http://msdn.microsoft.com/library/en-us/tsqlref/ts_sp_ae-az_52oy.asp


> ...non è che c'è qualche riferimento al DB "buono"?

No, tranquillo, lavorerai su una copia ;-)

Moreno Bondi [MCP]

da leggere,
23 set 2005, 09:13:5023/09/05
a

"Moreno Bondi [MCP]" <moreno...@gmail.com> ha scritto nel messaggio
news:evnWc0Dw...@tk2msftngp13.phx.gbl...

>
> "Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
> news:3piasvF...@individual.net...

[cut]

>> Allora in Enterprise Manager seleziona i menu Tools, Restore Database e
>> ti
>> apparirà una dialog box.
>> Specifica il nuovo nome del database, seleziona l'option button From
>> device,
>> premi il bottone Select Devices..., fai click su Add..., specifica il
>> nome
>> del file di backup, OK, OK, seleziona il tab Options e specifica nella
>> colonna "Move to physical file name" il nuovo percorso/nome dei files
>> .mdf e
>> .ldf, infine premi OK per fare partire il restore.
>>

Grande Lorenzo!!
GRAZIE!!

E' filato tutto liscio ed ho il mio DB di prova!!

Adesso riprendo in mano il tuo precedente post e cerco di creare quell'
"INDEX" che dici tu....

...spero di farcela perchè ho guardato quel link che mi hai dato ma mi sono
spaventato; qui c'è la sintassi intera del comando, non ho la più pallida
idea di cosa andare ad inserire.

Sopportami se ti faccio qualche altro post (farò comunque in modo di non
disturbarti più)!

Ciao e Grazie ancora!!

Lorenzo Benaglia

da leggere,
23 set 2005, 09:19:5123/09/05
a
Moreno Bondi [MCP] wrote:
> E' filato tutto liscio ed ho il mio DB di prova!!
Bene.

> ...spero di farcela perchè ho guardato quel link che mi hai dato ma
> mi sono spaventato; qui c'è la sintassi intera del comando, non ho la
> più pallida idea di cosa andare ad inserire.

In fondo alla pagina ci sono un sacco di esempi, studiateli con calma ed
approfondisci i vari argomenti.

> Ciao e Grazie ancora!!
Prego.

Ciao!

Moreno Bondi [MCP]

da leggere,
23 set 2005, 09:54:1923/09/05
a

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3phvprF...@individual.net...

Lorenzo,

allora ti spiego cosa ho fatto:

a) ho aperto il QUERY ANALYZER

b) dal menù "QUERY" ho selezionato "Chage Database..." ed ho specificato il
mio "testdb";

c) ora nella finestra di query sul titolo è riportato "Query -
SERVER.testdb.sa";

d) sull'abero di sinistra ho l'elenco delle varie tabelle che si trovano
all'interno del dbase;

e) fra le varie tabelle presenti, quella che l'utente usa per quella
procedura via ACCESS è la seguente, con le seguenti colonne:

dbo.QCON
|__columns
|__DATTPG (varchar(3), Null)
|__DATANN (int, Null)
|__DATNPE (int, Null)
|__DATTPO (varchar(1), Null)
|__DATPEC (int, Null)
|__DATK01 (varchar(15), Null)
|__DATK02 (varchar(15), Null)
|__DATK03 (varchar(15), Null)
|__DATK04 (varchar(15), Null)
|__DATE01 (decimal(19,5), Null)
|__DATAI (datetime, Null)
|__DATAF (datetime, Null)


Avevo pensato di usare questo statement degli esempi

CREATE TABLE doc_exc ( column_a INT)
GO
ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL
CONSTRAINT exb_unique UNIQUE
GO
EXEC sp_help doc_exc
GO
DROP TABLE doc_exc
GO

ma a parte il fatto che non vedo come inserire i miei riferimenti per
adattarli al mio DB ti vorrei chiedere come fare per far sì che sia auto
incrementante.
Se puoi e se ne hai voglia ti chiederei di indicarmi il comando giusto per
ottenere la famosa colonna tutta numerata con progressivi ed in modo che se
aggiungo una riga aggiuge lui il progressivo.

Se non hai tempo non ti preoccupare, mi hai già dato un aiuto prezioso!

Molte Grazie.

M.
Moreno Bondi - moreno...@gmail.comMicrosoft Certified Professional
(MCP) - Windows Server 2003= = = = = = = = = = = = = = = = = = = = = = = = =

= = = = This posting is provided "AS IS" with no warrantiesand confers no

rights.Le informazioni fornite in questo messaggio sono fornitesenza vincolo

David

da leggere,
23 set 2005, 10:10:0523/09/05
a
"Moreno Bondi [MCP]" ha scritto:
[CUT]

> dbo.QCON
> |__columns
> |__DATTPG (varchar(3), Null)
> |__DATANN (int, Null)
> |__DATNPE (int, Null)
> |__DATTPO (varchar(1), Null)
> |__DATPEC (int, Null)
> |__DATK01 (varchar(15), Null)
> |__DATK02 (varchar(15), Null)
> |__DATK03 (varchar(15), Null)
> |__DATK04 (varchar(15), Null)
> |__DATE01 (decimal(19,5), Null)
> |__DATAI (datetime, Null)
> |__DATAF (datetime, Null)
>
>
[CUT]

> ma a parte il fatto che non vedo come inserire i miei riferimenti per

> adattarli al mio DB ti vorrei chiedere come fare per far sě che sia auto

> incrementante.
> Se puoi e se ne hai voglia ti chiederei di indicarmi il comando giusto per
> ottenere la famosa colonna tutta numerata con progressivi ed in modo che
> se aggiungo una riga aggiuge lui il progressivo.

Il comando per creare il campo ID nella tabella ed impostarlo come chiave
primaria (a questo punto Clustered):

ALTER TABLE QCON ADD
ID int identity not null
GO
ALTER TABLE QCON ADD
CONSTRAINT [PK_QCON] PRIMARY KEY CLUSTERED( ID )
GO

Facci sapere come č andata!

P.S. Lascia l'indirizzo E-Mail che se abbiamo bisogno di configurare un
dominio AD ti sfiniamo :-))


Lorenzo Benaglia

da leggere,
23 set 2005, 10:21:0023/09/05
a
Moreno Bondi [MCP] wrote:
> ma a parte il fatto che non vedo come inserire i miei riferimenti per
> adattarli al mio DB ti vorrei chiedere come fare per far sì che sia
> auto incrementante.
> Se puoi e se ne hai voglia ti chiederei di indicarmi il comando
> giusto per ottenere la famosa colonna tutta numerata con progressivi
> ed in modo che se aggiungo una riga aggiuge lui il progressivo.

Leggi attentamente il seguente codice:

/* Mi sposto nel database tempdb
** (tu invece eseguirai la modifica in testdb)
*/
USE tempdb
GO

/* Definisco la tabella dbo.QCON */
CREATE TABLE dbo.QCON(
DATTPG varchar(3) NULL,
DATANN int NULL,
DATNPE int NULL,
DATTPO varchar(1) NULL,
DATPEC int NULL,
DATK01 varchar(15) NULL,
DATK02 varchar(15) NULL,
DATK03 varchar(15) NULL,
DATK04 varchar(15) NULL,
DATE01 decimal(19,5) NULL,
DATAI datetime NULL,
DATAF datetime NULL
)
GO

/* La popolo con qualche riga di prova */
INSERT dbo.QCON VALUES(
'AAA'
, 1
, 1
, 'A'
, 1
, 'AAAAA'
, 'AAAAA'
, 'AAAAA'
, 'AAAAA'
, 1.1
, '20050923'
, '20050923'
)
INSERT dbo.QCON VALUES(
'BBB'
, 2
, 2
, 'B'
, 2
, 'BBBBB'
, 'BBBBB'
, 'BBBBB'
, 'BBBBB'
, 2.2
, '20050923'
, '20050923'
)
INSERT dbo.QCON VALUES(
'CCC'
, 3
, 3
, 'C'
, 3
, 'CCCCC'
, 'CCCCC'
, 'CCCCC'
, 'CCC'
, 3.3
, '20050923'
, '20050923'
)
GO

/* Vediamo */
SELECT DATTPG, DATANN, DATNPE, DATTPO
FROM dbo.QCON
GO

/* Output:

DATTPG DATANN DATNPE DATTPO
------ ----------- ----------- ------
AAA 1 1 A
BBB 2 2 B
CCC 3 3 C

(3 row(s) affected)

*/

/****************************************************
** QUESTE SONO LE MODIFICHE CHE DOVRAI APPORTARE **
*****************************************************

1) Aggiungi la colonna QCON_ID di tipo int

*/
ALTER TABLE dbo.QCON
ADD QCON_ID int NOT NULL IDENTITY
GO

/* Output:

(3 row(s) affected)

*/

/* 2) Definisci su di essa un constraint PRIMARY KEY */
ALTER TABLE dbo.QCON
ADD CONSTRAINT PK_QCON PRIMARY KEY(QCON_ID)
GO

/* Output:

The command(s) completed successfully.

*/

/* Vediamo la nuova struttura della tabella */
EXEC sp_help [dbo.QCON]
GO

/* Output:

....

Column_name Type
------------ --------- ...
DATTPG varchar
DATANN int
DATNPE int
DATTPO varchar
DATPEC int
DATK01 varchar
DATK02 varchar
DATK03 varchar
DATK04 varchar
DATE01 decimal
DATAI datetime
DATAF datetime
QCON_ID int


Identity Seed Increment Not For Replication
---------- ----- ---------- -------------------
QCON_ID 1 1 0

...

index_name index_description index_keys
----------- -------------------------------------------------- ----------
PK_QCON clustered, unique, primary key located on PRIMARY QCON_ID


constraint_type constraint_name
----------------------- ---------------- ...
PRIMARY KEY (clustered) PK_QCON


No foreign keys reference this table.
No views with schema binding reference this table.

*/

/* Come vedi è stata aggiunta la nuova colonna QCON_ID di tipo integer
** con l'attributo IDENTITY avende seme ed incremento pari a 1 e su
** di è essa è stata definita la PRIMARY KEY della tabella.
** Se andremo ad interrogare la tabella avremo:
*/
SELECT QCON_ID, DATTPG, DATANN, DATNPE, DATTPO
FROM dbo.QCON
GO

/* Output:

QCON_ID DATTPG DATANN DATNPE DATTPO
----------- ------ ----------- ----------- ------
1 AAA 1 1 A
2 BBB 2 2 B
3 CCC 3 3 C

(3 row(s) affected)

*/

/* Ora provo ad aggiungere una nuova riga */
INSERT dbo.QCON VALUES(
'DDD'
, 4444
, 4444
, 'D'
, 4444
, 'DDDDD'
, 'DDDDD'
, 'DDDDD'
, 'DDD'
, 444.44
, '20050923'
, '20050923'
)
GO

/* vediamo... */
SELECT QCON_ID, DATTPG, DATANN, DATNPE, DATTPO
FROM dbo.QCON
GO

/* Output:

QCON_ID DATTPG DATANN DATNPE DATTPO
----------- ------ ----------- ----------- ------
1 AAA 1 1 A
2 BBB 2 2 B
3 CCC 3 3 C
4 DDD 4444 4444 D

(4 row(s) affected)

*/

/* Bene, ora ripulisco il tempdb
** (tu non eseguire questo comando ;-))
*/
DROP TABLE dbo.QCON


> Molte Grazie.

Moreno Bondi [MCP]

da leggere,
23 set 2005, 10:59:1923/09/05
a

"David" <da...@nospam.com> ha scritto nel messaggio
news:Oz3bDiEw...@tk2msftngp13.phx.gbl...

> "Moreno Bondi [MCP]" ha scritto:
> [CUT]
>> dbo.QCON
>> |__columns
>> |__DATTPG (varchar(3), Null)
>> |__DATANN (int, Null)
>> |__DATNPE (int, Null)
>> |__DATTPO (varchar(1), Null)
>> |__DATPEC (int, Null)
>> |__DATK01 (varchar(15), Null)
>> |__DATK02 (varchar(15), Null)
>> |__DATK03 (varchar(15), Null)
>> |__DATK04 (varchar(15), Null)
>> |__DATE01 (decimal(19,5), Null)
>> |__DATAI (datetime, Null)
>> |__DATAF (datetime, Null)
>>
>>
> [CUT]
>
>> ma a parte il fatto che non vedo come inserire i miei riferimenti per
>> adattarli al mio DB ti vorrei chiedere come fare per far sì che sia auto
>> incrementante.
>> Se puoi e se ne hai voglia ti chiederei di indicarmi il comando giusto
>> per ottenere la famosa colonna tutta numerata con progressivi ed in modo
>> che se aggiungo una riga aggiuge lui il progressivo.
>
> Il comando per creare il campo ID nella tabella ed impostarlo come chiave
> primaria (a questo punto Clustered):
>
> ALTER TABLE QCON ADD
> ID int identity not null
> GO
> ALTER TABLE QCON ADD
> CONSTRAINT [PK_QCON] PRIMARY KEY CLUSTERED( ID )
> GO
>
> Facci sapere come è andata!

>
> P.S. Lascia l'indirizzo E-Mail che se abbiamo bisogno di configurare un
> dominio AD ti sfiniamo :-))
>

GRANDE!!! GRANDE!!! HA FUNZIONATO!!

Non so come ringraziarvi ragazzi, ha aggiunto alla fine il nuovo campo ID ed
effettivamente mi ha inserito il numeratore progressivo!!!!!

David e Lorenzo, grazie davvero!!!

A questo punto...31 e 32....

La mia domanda è...

a) se inserisco ad esempio 1000 record nuovi lui prosegue con la numerazione
progressiva automaticamente ed effettivamente mi aggiunge altri 1000 ID;
(mettiamo che il numeratore arriva a 7500) con un numero di righe effettive
pari proprio a 7500;

b) ora, per qualche motivo (magari perchè mi sono sbagliato o comunque
perchè devo eliminare TOT record) elimino gli ultimi 1000 record che avevo
inserito; è chiaro che il numero di record nel DBASE ritorna ad essere 6500;

c) adesso riaggiungo nuovamente altri 1500 record;

d) il risultato finale è che il mio dbase ha ora complessivamente 8000
record solo che, correttamente, gli ultimi 1500 non sono stati numerati a
partire da 6501 fino a 8000 (nel campo ID che abbiamo aggiunto) ma sono
stati numerati da 7501 a 9000 e questo sempre per quel discorso di
UNIVOCITA' di ID che abbiamo visto

Vi faccio la domanda che certamente avrete già intuito e cioè...

..SE VOLESSI RECUPERARE GLI INDICATORI PERSI (per riutilizzarli) come devo
fare?

..quindi in pratica come faccio, periodicamente, a fare una sorta di
operazione di "MANUTENZIONE" in modo che se il dbase ha 8000 record effetti
essi, dopo questa manutenzione, siano effettivamente numerati nel campo ID
con 8000 numeri dall'1 all'8000??

ALTRA DOMANDA:

a) fino a che numero intero MASSIMO il campo ID mi permette di assegnare
codici di numerazione nuovi?


Vi chiedo, ancora una volta, se potete scrivermi le righe SQL da digitare
per ottenere il risultato voluto oppure se c'è qualche TOOL in Enterprise
Manager da usare per questa operazione.

Non finirò mai di ringraziarmi!!

Saluti a tutti!

Moreno

PS: ...non esitate a contattarmi per configurazione di domini AD!!


--
Moreno Bondi - moreno...@gmail.com

Microsoft Certified Professional (MCP) - Windows Server 2003

= = = = = = = = = = = = = = = = = = = = = = = = = = = = =


This posting is provided "AS IS" with no warranties
and confers no rights.

Le informazioni fornite in questo messaggio sono fornite

David

da leggere,
23 set 2005, 11:24:4123/09/05
a
Moreno Bondi [MCP] ha scritto:
> GRANDE!!! GRANDE!!! HA FUNZIONATO!!
Bene!

[CUT]


> ..SE VOLESSI RECUPERARE GLI INDICATORI PERSI (per riutilizzarli) come devo
> fare?

Non lo puoi fare... a meno che non crei una nuova tabella e travasi i dati
oppure fai il DROP della colonna e la crei nuovamente (o una qualsiasi cosa
del genere); ma non ha nessun senso.

[CUT]


> ALTRA DOMANDA:
>
> a) fino a che numero intero MASSIMO il campo ID mi permette di assegnare
> codici di numerazione nuovi?

Il numero massimo di un INT: 2.147.483.647

[OT] e qui ci vuole Lorenzo:
Solo per curiosità, anche perché 2.147.483.647 * 4 Byte (del campo INT) =
8.589.934.588 di Byte... quindi non è il caso di preoccuparsi più di troppo
:-)
Una volta raggiunti i due miliardi eccetera eccetera che fa? Ricomincia da
1, inizia ad andare in negativo o da errore?


Moreno Bondi [MCP]

da leggere,
23 set 2005, 11:35:1223/09/05
a

"David" <da...@nospam.com> ha scritto nel messaggio
news:uXWgqLFw...@TK2MSFTNGP09.phx.gbl...

Direi che è un numero che può bastare ampiamente.

Tuttavia, nel caso volessi farlo, mi puoi dare l'istruzione esatta per il
"DROP" che la provo subito?
Ipotizzando poi di avere un DBASE con centinaia di tabelle simili a questa e
volendo fare tutto il gioco su OGNUNA delle tabelle, esiste un comando che
mi permetta di eseguire l'azione in automatico o devo rassegnarmi a farlo a
mano per tutte le tabelle presenti nel DB?

Grazie!

Moreno

David

da leggere,
23 set 2005, 11:41:0923/09/05
a
David ha scritto:

> [OT] e qui ci vuole Lorenzo:
> Solo per curiosità, anche perché 2.147.483.647 * 4 Byte (del campo INT) =
> 8.589.934.588 di Byte... quindi non è il caso di preoccuparsi più di
> troppo :-)
> Una volta raggiunti i due miliardi eccetera eccetera che fa? Ricomincia da
> 1, inizia ad andare in negativo o da errore?

Mi rispondo da solo:

CREATE TABLE Test (
ID int identity not null,
Riga smallint
)
GO

/* Imposto il valore degli IDENTITY */
DBCC CHECKIDENT ( Test, RESEED, 2147483647 )

/* Questo record riesce ad inserirlo */
INSERT INTO Test VALUES( 1 )

SELECT *
FROM Test

/* Con questo record va in errore */
INSERT INTO Test VALUES( 2 )

/* La drop non viene eseguita */
DROP TABLE Test

/*
Checking identity information: current identity value '1', current column
value '2147483647'.
DBCC execution completed. If DBCC printed error messages, contact your
system administrator.
ID Riga
----------- ------
2147483647 1

Server: messaggio 8115, livello 16, stato 1, riga 1
Arithmetic overflow error converting IDENTITY to data type int.
Arithmetic overflow occurred.
*/


Moreno Bondi [MCP]

da leggere,
23 set 2005, 11:47:5323/09/05
a

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3pihacF...@individual.net...

> Moreno Bondi [MCP] wrote:
>> Molte Grazie.
> Prego.
>
> Ciao!
>
> --
> Lorenzo Benaglia
> Microsoft MVP - SQL Server
> http://blogs.dotnethell.it/lorenzo/
> http://italy.mvps.org
>

...la tua spiegazione è semplicemente perfetta!!

Grazie davvero!

Moreno


--
Moreno Bondi - moreno...@gmail.com

Microsoft Certified Professional (MCP) - Windows Server 2003

= = = = = = = = = = = = = = = = = = = = = = = = = = = = =


This posting is provided "AS IS" with no warranties
and confers no rights.

Le informazioni fornite in questo messaggio sono fornite

David

da leggere,
23 set 2005, 11:48:2123/09/05
a
Moreno Bondi [MCP] ha scritto:
> Tuttavia, nel caso volessi farlo, mi puoi dare l'istruzione esatta per il
> "DROP" che la provo subito?
ALTER TABLE QCON DROP CONSTRAINT [PK_QCON]
GO
ALTER TABLE QCON DROP COLUMN ID
GO

> Ipotizzando poi di avere un DBASE con centinaia di tabelle simili a questa
> e volendo fare tutto il gioco su OGNUNA delle tabelle, esiste un comando
> che mi permetta di eseguire l'azione in automatico o devo rassegnarmi a
> farlo a mano per tutte le tabelle presenti nel DB?

Devi duplicarlo manualmente per ogni tabella.

> Grazie!
Prego

> Moreno
David


giorgio rancati

da leggere,
23 set 2005, 11:54:0723/09/05
a
"David" <da...@nospam.com> ha scritto nel messaggio
news:uXWgqLFw...@TK2MSFTNGP09.phx.gbl...

> [CUT]
> > ..SE VOLESSI RECUPERARE GLI INDICATORI PERSI (per riutilizzarli) come
devo
> > fare?
> Non lo puoi fare... a meno che non crei una nuova tabella e travasi i dati
> oppure fai il DROP della colonna e la crei nuovamente (o una qualsiasi
cosa
> del genere); ma non ha nessun senso.

be non è detto, subito dopo aver cancellato le righe in coda alla tabella
puoi reimpostare l'identity di partenza con l'istruzione
----
DBCC CHECKIDENT
per maggiori info
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_dbcc_5lv8.asp
----

> [OT] e qui ci vuole Lorenzo:
> Solo per curiosità, anche perché 2.147.483.647 * 4 Byte (del campo INT) =
> 8.589.934.588 di Byte... quindi non è il caso di preoccuparsi più di
troppo
> :-)
> Una volta raggiunti i due miliardi eccetera eccetera che fa? Ricomincia da
> 1, inizia ad andare in negativo o da errore?

ti da un bel Overflow, fai una provaprova
----
Use TempDb
GO

Create Table Tab1
(Id int Identity(2147483647 ,1) Primary Key,
Campo1 varchar(10))

Insert Tab1 Values(Default)
Insert Tab1 Values(Default)
----

Il primo insert va a buon fine, ma al secondo ricevi l'errore
----


Server: messaggio 8115, livello 16, stato 1, riga 1

Si è verificato un errore di overflow aritmetico durante la conversione del
tipo di dati da IDENTITY a int.
Si è verificato un overflow aritmetico.
----
se necessiti più di 2.147.483.647 puoi sempre cambiare tipo di dato e
usarne uno con maggiore capacità

Ciao
--
Giorgio Rancati
[Office Access MVP]


Moreno Bondi [MCP]

da leggere,
23 set 2005, 11:50:0623/09/05
a

"David" <da...@nospam.com> ha scritto nel messaggio
news:%23p7U2UF...@TK2MSFTNGP15.phx.gbl...

Quindi scartiamo la DROP come ipotesi per eventuale manutenzione, corretto?

M.

Moreno Bondi [MCP]

da leggere,
23 set 2005, 11:54:5523/09/05
a

"giorgio rancati" <giorgio_No_Sp...@tiscali.it> ha scritto nel
messaggio news:e2H9bZFw...@TK2MSFTNGP11.phx.gbl...

> se necessiti più di 2.147.483.647 puoi sempre cambiare tipo di dato e
> usarne uno con maggiore capacità
>

Ciao,
quale tipo ad esempio?

Molte grazie!

Moreno

David

da leggere,
23 set 2005, 12:02:3723/09/05
a
giorgio rancati ha scritto:

> be non è detto, subito dopo aver cancellato le righe in coda alla tabella
> puoi reimpostare l'identity di partenza con l'istruzione
> ----
> DBCC CHECKIDENT
> per maggiori info
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_dbcc_5lv8.asp
Vero, però devi eseguirlo subito dopo la delete e non riutilizza i "buchi
vuoti" ma riallinea solo l'identity al valore massimo contenuto nella
colonna.

> ----
> Server: messaggio 8115, livello 16, stato 1, riga 1
> Si è verificato un errore di overflow aritmetico durante la conversione
> del
> tipo di dati da IDENTITY a int.
> Si è verificato un overflow aritmetico.
> ----

Ho avuto l'illuminazione di provare dopo :-)

> se necessiti più di 2.147.483.647 puoi sempre cambiare tipo di dato e
> usarne uno con maggiore capacità

Ancora vero... tipo bigint (9.223.372.036.854.775.807)... [OT] come si legge
in italiano? :-))


David

da leggere,
23 set 2005, 12:03:5623/09/05
a
Moreno Bondi [MCP] ha scritto:
> Quindi scartiamo la DROP come ipotesi per eventuale manutenzione,
> corretto?
Io la scarterei


Moreno Bondi [MCP]

da leggere,
23 set 2005, 12:10:5923/09/05
a

"David" <da...@nospam.com> ha scritto nel messaggio
news:O3Lb6gFw...@TK2MSFTNGP11.phx.gbl...

>> se necessiti più di 2.147.483.647 puoi sempre cambiare tipo di dato e
>> usarne uno con maggiore capacità
> Ancora vero... tipo bigint (9.223.372.036.854.775.807)... [OT] come si
> legge in italiano? :-))

Addirittura....
...no no....ne bastano molti meno...già il valore massimo degli integer
difficilmente mi richiederà di manutenzionarlo.

Comunque secondo me almeno una volta all'anno l'operazione non è male farla.

A questo punto direi che la cosa migliore è creare una tabella nuova (e
vuota ma PRIVA della colonna ID) travasargli i dati e, solo dopo,
rinominarla come quella vecchia (quindi l'originale) e poi creare di nuovo
la colonna ID nel modo visto.

Corretto?

Ti chiedo un ultimo sforzo: mi scrivi il codice SQL per fare questo?
quindi per travasare il contenuto dell'originale QCON nella nuova QCON1 ma
PRIVO della colonna ID che poi aggiungerò nel modo visto?

Poi come la rinomino la QCON1 in QCON?

Ok, ora non vi disturbo più...siete stati grandi.

Grazie davvero!

Moreno

giorgio rancati

da leggere,
23 set 2005, 12:20:3223/09/05
a
"Moreno Bondi [MCP]" <moreno...@gmail.com> ha scritto nel messaggio
news:%23B85mcF...@TK2MSFTNGP15.phx.gbl...

>
> "giorgio rancati" <giorgio_No_Sp...@tiscali.it> ha scritto nel
> messaggio news:e2H9bZFw...@TK2MSFTNGP11.phx.gbl...
> > se necessiti più di 2.147.483.647 puoi sempre cambiare tipo di dato e
> > usarne uno con maggiore capacità
> >
>
> Ciao,
> quale tipo ad esempio?
>

Ciao Moreno,

puoi usare ad esempio il tipo BigInt o il tipo Numeric(x,y), però in Access
il BigInt non esiste e viene visto come un campo testo di 255 caratteri e
questo può essere scomodo. Il tipo numeric esiste in access dalla versione
2000 in avanti, con Acc97 devo provare a vedere cosa succede.


Ciao Giorgio

giorgio rancati

da leggere,
23 set 2005, 12:23:2723/09/05
a
"David" <da...@nospam.com> ha scritto nel messaggio
news:O3Lb6gFw...@TK2MSFTNGP11.phx.gbl...

> Ho avuto l'illuminazione di provare dopo :-)

si, scusa, ho visto il tuo post solo dopo aver inviato il mio

> > se necessiti più di 2.147.483.647 puoi sempre cambiare tipo di dato e
> > usarne uno con maggiore capacità
> Ancora vero... tipo bigint (9.223.372.036.854.775.807)... [OT] come si
legge
> in italiano? :-))

LOL :-)

David

da leggere,
23 set 2005, 12:32:4423/09/05
a
Moreno Bondi [MCP] ha scritto:
> Comunque secondo me almeno una volta all'anno l'operazione non è male
> farla.
Io non ne sono proprio convinto, fai fare ad SQL Server del lavoro che ha
poco senso...

> A questo punto direi che la cosa migliore è creare una tabella nuova (e
> vuota ma PRIVA della colonna ID) travasargli i dati e, solo dopo,
> rinominarla come quella vecchia (quindi l'originale) e poi creare di nuovo
> la colonna ID nel modo visto.
>
> Corretto?

No, la tabella la creerei già con il campo ID, con il nome corretto
rinominando prima quella vecchia :-)

> Ti chiedo un ultimo sforzo: mi scrivi il codice SQL per fare questo?
> quindi per travasare il contenuto dell'originale QCON nella nuova QCON1 ma
> PRIVO della colonna ID che poi aggiungerò nel modo visto?

/* Elimino il constraint */


ALTER TABLE QCON DROP CONSTRAINT [PK_QCON]
GO

/* Rinomino la tabella */
sp_rename 'QCON', 'QCON_OLD'
GO

/* Creo la nuova tabella */


CREATE TABLE dbo.QCON(
DATTPG varchar(3) NULL,
DATANN int NULL,
DATNPE int NULL,
DATTPO varchar(1) NULL,
DATPEC int NULL,
DATK01 varchar(15) NULL,
DATK02 varchar(15) NULL,
DATK03 varchar(15) NULL,
DATK04 varchar(15) NULL,
DATE01 decimal(19,5) NULL,
DATAI datetime NULL,

DATAF datetime NULL,
ID int IDENTITY NOT NULL
)
GO

/* Creo il constraint */
ALTER TABLE QCON
ADD CONSTRAINT [PK_QCON] PRIMARY KEY(ID)
GO

/* Popolo la nuova tabella coi i dati della vecchia */
INSERT INTO QCON ( DATTPG, DATANN, DATNPE, DATTPO, DATPEC,
DATK01, DATK02, DATK03, DATK04, DATE01, DATAI, DATAF )
SELECT DATTPG, DATANN, DATNPE, DATTPO, DATPEC,
DATK01, DATK02, DATK03, DATK04, DATE01, DATAI, DATAF
FROM QCON_OLD
ORDER BY ID
GO

/* Elimino la vecchia tabella */
DROP TABLE QCON_OLD
GO

= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This posting is provided "AS IS" with no warranties
and confers no rights.

Le informazioni fornite in questo messaggio sono fornite
senza vincolo di garanzia e senza responsabilità alcuna
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =

:-))


Moreno Bondi [MCP]

da leggere,
26 set 2005, 04:20:4126/09/05
a

"David" <da...@nospam.com> ha scritto nel messaggio
news:OF0QwxFw...@TK2MSFTNGP12.phx.gbl...

[cut]

Ciao David!

Vedo la tua risposta al POST solo ora!

Davvero molte grazie per il prezioso aiuto e per la pazienza che hai avuto
(assieme a Leonardo) nell'assistermi.

Mi salvo subito il messaggio con queste istruzioni e le provo quanto prima.

Buon lavoro e grazie ancora!

Saluti


Moreno


David

da leggere,
26 set 2005, 05:14:4926/09/05
a
Moreno Bondi [MCP] ha scritto:
[cut]

> Davvero molte grazie per il prezioso aiuto e per la pazienza che hai avuto
> (assieme a Leonardo) nell'assistermi.
Prego!

David

P.S. Forse "assieme a Lorenzo"? :-)


Moreno Bondi [MCP]

da leggere,
26 set 2005, 05:19:2326/09/05
a

"David" <da...@nospam.com> ha scritto nel messaggio
news:u1gu$qnwFH...@TK2MSFTNGP10.phx.gbl...

Sono proprio fuso (ho passato il week-end su un server da un cliente a
Ravenna e ho dormito solo 4 ore stanotte!)

Sě, intendevo proprio Lorenzo!

Sorry e buona giornata !!

;-)))))

Moreno


0 nuovi messaggi