Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: stored procedure x differenze fra tabelle

177 views
Skip to first unread message

Lorenzo Benaglia

unread,
Dec 14, 2004, 11:02:44 AM12/14/04
to
ciccio wrote:
> ho la necessità di confrontare le strutture di due tabelle e volevo
> sapere se esiste una stored procedure che restituisce questi dati.

Ciao Ciccio,

no, non esiste alcuna stored procedure che fa quello che chiedi.
Ad ogni modo esistono in commercio diversi tools studiati appositamente per
allineare i metadati.

Uno di questi è SQL Compare della red-gate software:
http://www.red-gate.com/SQL_Compare.htm

Andrea Benedetti, un utente di questo ng, ha scritto un tool analogo ma
gratuito di cui trovi maggiori info al seguente link:
http://www.absistemi.it/sqlCompare.aspx

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

Andrea Benedetti

unread,
Dec 14, 2004, 11:08:19 AM12/14/04
to
Salve ciccio,

"ciccio" <cic...@discussions.microsoft.com> wrote in message
news:459E0125-F71C-410B...@microsoft.com...
> ciao a tutti


> ho la necessità di confrontare le strutture di due tabelle e volevo sapere
> se esiste una stored procedure che restituisce questi dati.
>

> chi mi può aiutare?

Esistono software commerciali sviluppati ad hoc, come quello della Red Gate.

Esistono anche tool gratuiti come questo:
www.absistemi.it --> tools --> SQL CFront 2004

Tra le varie cose analizza e confronta strutture ed oggetti di due database
(tipicamente quello di sviluppo e quello di produzione).
Ogni feedback è sempre molto ben accetto.

> ciao
> Ciccio

HTH,
Andrea


ciccio

unread,
Dec 14, 2004, 11:51:01 AM12/14/04
to
>
> Esistono software commerciali sviluppati ad hoc, come quello della Red Gate.
>
> Esistono anche tool gratuiti come questo:
> www.absistemi.it --> tools --> SQL CFront 2004

> Tra le varie cose analizza e confronta strutture ed oggetti di due database
> (tipicamente quello di sviluppo e quello di produzione).
> Ogni feedback è sempre molto ben accetto.
>
> > ciao
> > Ciccio
>
> HTH,
> Andrea

Il programma mi piace, ma lo script sql che genera non tiene conto dei dati
presenti sul db del client, che con il DROP TABLE

ciccio

unread,
Dec 14, 2004, 11:55:02 AM12/14/04
to
>
> Esistono software commerciali sviluppati ad hoc, come uello della Red Gate.

>
> Esistono anche tool gratuiti come questo:
> www.absistemi.it --> tools --> SQL CFront 2004

> Tra le varie cose analizza e confronta strutture ed oggetti di due database
> (tipicamente quello di sviluppo e quello di produzione).
> Ogni feedback è sempre molto ben accetto.
>
> > ciao
> > Ciccio
>
> HTH,
> Andrea

Il programma mi piace, ma lo script sql che genera non tiene conto dei dati

presenti sul db del client, che con il DROP TABLE vanno persi;
come faccio a non perderli???

grazie
ciao Ciccio

Andrea Benedetti

unread,
Dec 14, 2004, 12:21:26 PM12/14/04
to
Salve ciccio,
"ciccio" <cic...@discussions.microsoft.com> wrote in message
news:802691D7-4163-4DB3...@microsoft.com...

> Il programma mi piace, ma lo script sql che genera non tiene conto dei
> dati
> presenti sul db del client, che con il DROP TABLE vanno persi;
> come faccio a non perderli???

Il programma si limita ad analizzare / confrontare tabelle ed oggetti e non
il loro contenuto.
Non puoi evitare la drop table e semplicemente allineare le strutture (alter
table, ecc...)?

> grazie
> ciao Ciccio

Prego,
Andrea


ciccio

unread,
Dec 14, 2004, 12:31:01 PM12/14/04
to
> Il programma si limita ad analizzare / confrontare tabelle ed oggetti e non
> il loro contenuto.
> Non puoi evitare la drop table e semplicemente allineare le strutture (alter
> table, ecc...)?

ok, ma nel caso dovessi fare un aggiornamento della struttura di un db coma
faccio??

ciao
Ciccio

Andrea Benedetti

unread,
Dec 14, 2004, 12:36:14 PM12/14/04
to
Salve ciccio,

"ciccio" <cic...@discussions.microsoft.com> wrote in message

news:E6C02C3E-63A4-4631...@microsoft.com...

Funzione compare
Imposti master e client (e testi la connessione)
Pulsante "Compare Tables Structures" --> "View Script sql"

Qui *dovresti* trovare le istruzioni da lanciare sul client per allineare le
sue tabelle alla struttura del master.

Pulsante "Compare Objects" --> per generare script di oggetti non presenti
sul db client

> ciao
> Ciccio

Ciao,
Andrea


Davide Mauri

unread,
Dec 14, 2004, 1:29:27 PM12/14/04
to
Se ti interessa solo il confronto io ho in cantiere lo sviluppo di questo
tool

http://www.davidemauri.it/dabcos

mi sarebbe piaciuto implementare anche un meccanismo di sincronizzazione (e
nei miei piani c'č ancora) ma per limiti di tempo non sono mai riuscito a
completarlo.
In ogni caso il confronto tra due db sulla struttura dei dati, viste e
stored procedure funziona benone.

Ciaoooo

--
Davide Mauri
www.davidemauri.it

"Andrea Benedetti" <abene...@absistemi.it> wrote in message
news:OzsviNg4...@tk2msftngp13.phx.gbl...

ciccio

unread,
Dec 15, 2004, 10:11:06 AM12/15/04
to
"Davide Mauri" wrote:

> Se ti interessa solo il confronto io ho in cantiere lo sviluppo di questo
> tool

Innanzitutto scusami se non ti ho risposto subito.
ho scaricato il file zip ed eseguito l'exe ma mi da il seguente errore:

-- an unhandled exception has occurred in your application.

La finestra di errore fornisce anche i seguenti 'dettagli':

< - - - - Inizio detail - - - - >

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.IO.FileNotFoundException: File or assembly name DaBCoS.Engine, or one
of its dependencies, was not found.
File name: "DaBCoS.Engine"
at DaBCoS.FormMain.FormMain_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg,
IntPtr wparam, IntPtr lparam)

=== Pre-bind state information ===
LOG: DisplayName = DaBCoS.Engine, Version=1.0.1198.25769, Culture=neutral,
PublicKeyToken=null
(Fully-specified)
LOG: Appbase = C:\Documents and Settings\Sviluppo2\Desktop\dowload\
LOG: Initial PrivatePath = NULL
Calling assembly : DaBCoS, Version=0.2.1198.25769, Culture=neutral,
PublicKeyToken=null.
===

LOG: Policy not being applied to reference at this time (private, custom,
partial, or location-based assembly bind).
LOG: Post-policy reference: DaBCoS.Engine, Version=1.0.1198.25769,
Culture=neutral, PublicKeyToken=null
LOG: Attempting download of new URL file:///C:/Documents and
Settings/Sviluppo2/Desktop/dowload/DaBCoS.Engine.DLL.
LOG: Attempting download of new URL file:///C:/Documents and
Settings/Sviluppo2/Desktop/dowload/DaBCoS.Engine/DaBCoS.Engine.DLL.
LOG: Attempting download of new URL file:///C:/Documents and
Settings/Sviluppo2/Desktop/dowload/DaBCoS.Engine.EXE.
LOG: Attempting download of new URL file:///C:/Documents and
Settings/Sviluppo2/Desktop/dowload/DaBCoS.Engine/DaBCoS.Engine.EXE.

************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
DaBCoS
Assembly Version: 0.2.1198.25769
Win32 Version: 0.2.1198.25769
CodeBase:
file:///C:/Documents%20and%20Settings/Sviluppo2/Desktop/dowload/DaBCoS.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------

************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.

< - - - - Fine detail - - - - >

cliccando su 'continue' il programma parte, ma non sono riuscito ad
effettuare una connessione al server...

attendo lumi...

grazie mille del tuo aiuto.

Ciao
Ciccio

ciccio

unread,
Dec 15, 2004, 10:41:04 AM12/15/04
to
Ok, sono riuscito a farlo funzionare...(non avevo estratto tutti i file dal
zip)
mi piace, ed è ben fatto; io sto generando lo stesso tool con MS visual
FoxPro 8 e sono giunto alla fase di visualizzare le differenze fra fra i due
db.

solo una delucidazione: tu utilizzi le strored procedure sp_tables e
sp_columns????

> Se ti interessa solo il confronto io ho in cantiere lo sviluppo di questo
> tool
>
> http://www.davidemauri.it/dabcos
>
> mi sarebbe piaciuto implementare anche un meccanismo di sincronizzazione (e

> nei miei piani c'è ancora) ma per limiti di tempo non sono mai riuscito a
> completarlo.

Il mio obiettivo è quello di aggiornare la struttura del db popolato di dati
di un applicazione esistente e funzionante.

> In ogni caso il confronto tra due db sulla struttura dei dati, viste e
> stored procedure funziona benone.

Si, e mi piace anche come visualizza le differenze

ciao
Ciccio

Davide Mauri

unread,
Dec 15, 2004, 11:11:46 AM12/15/04
to
Sono contento che ti piaccia :-)

Al momento utilizzo (come puoi vedere nei file XML di configurazione) la
stored procedure non documentata sp_MSHelpcolum per le colonne, mentre
utilizzo la vista standard INFORMATION_SCHEMA.TABLES per la lista delle
tabelle.

Ciaooo


--
Davide Mauri
www.davidemauri.it

"ciccio" <cic...@discussions.microsoft.com> wrote in message

news:BCB4668A-434C-415F...@microsoft.com...

ciccio

unread,
Dec 15, 2004, 12:29:04 PM12/15/04
to
mi dicevi che avevi intenzione di creare un meccanismo per la sincronizzazione;
Ma in che maniera???

io avevo pensato di generare una tabella vuota (uguale alla tabella del DB
aggiornato) nel db di destianzione, per poi riempirla con i dati della
vecchia tabella presente sul db di destinazione;
nel caso sia andato tutto per il verso giusto a questo punto bisognerebbe
effettuare una drop table della vecchia tabella e rinominare quella nuova.

E' una cosa fattibile?????

Ciao
Ciccio

Davide Mauri

unread,
Dec 16, 2004, 3:52:30 AM12/16/04
to
Ciao

"ciccio" <cic...@discussions.microsoft.com> wrote in message

news:C721BC39-3604-4DA1...@microsoft.com...


> mi dicevi che avevi intenzione di creare un meccanismo per la
> sincronizzazione;
> Ma in che maniera???
>
> io avevo pensato di generare una tabella vuota (uguale alla tabella del DB
> aggiornato) nel db di destianzione, per poi riempirla con i dati della
> vecchia tabella presente sul db di destinazione;

.....mmmm.....io non ho assolutamente tenuto conto dei dati. Il mio tool e
la mia necessità era "semplicemente" quella di confrontare e scoprire le
differenze nella struttura della tabella, non nei dati in essa contenuti.

Se ti server sincronizzare i dati lo puoi fare tranquillamente da DTS o,
meglio ancora, tramite T-SQL. Eccoti un esempio che mostro sempre durante il
corso MOC2072 e MOC 2073:

use tempdb
go

if exists (select * from dbo.sysobjects where id = object_id(N'[Finale]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [Finale]
GO

CREATE TABLE [Finale] (
[ID] [int] NOT NULL ,
[F1] [varchar] (50) NULL ,
[F2] [varchar] (50) NULL ,
CONSTRAINT [PK_Finale] PRIMARY KEY CLUSTERED
(
[ID]
)
)
GO

SET NOCOUNT ON
INSERT INTO Finale VALUES (1, '1', 'a')
INSERT INTO Finale VALUES (2, '2', 'b')
INSERT INTO Finale VALUES (3, '3', 'c')
INSERT INTO Finale VALUES (4, '4', 'd')
INSERT INTO Finale VALUES (11, '5', 'm')
INSERT INTO Finale VALUES (12, '6', 'n')
INSERT INTO Finale VALUES (13, '7', 'o')
INSERT INTO Finale VALUES (14, '8', 'p')
INSERT INTO Finale VALUES (15, '9', 'q')
GO

SET NOCOUNT ON
SELECT * FROM Finale
GO

CREATE TABLE [#TempTable] (
[ID] [int] NOT NULL ,
[F1] [varchar] (50) NULL ,
[F2] [varchar] (50) NULL ,
CONSTRAINT [PK_TempTable] PRIMARY KEY CLUSTERED
(
[ID]
)
)
GO

SET NOCOUNT ON
INSERT INTO #TempTable VALUES (1, 'a', 'a - updated')
INSERT INTO #TempTable VALUES (2, 'b', 'b - updated')
INSERT INTO #TempTable VALUES (3, 'c', 'c - updated')
INSERT INTO #TempTable VALUES (4, 'd', 'd - updated')
INSERT INTO #TempTable VALUES (5, 'e', 'e - added')
INSERT INTO #TempTable VALUES (6, 'f', 'f - added')
INSERT INTO #TempTable VALUES (7, 'g', 'g - added')
INSERT INTO #TempTable VALUES (8, 'h', 'h - added')
INSERT INTO #TempTable VALUES (9, 'i', 'i - added')
INSERT INTO #TempTable VALUES (10, 'l', 'l - added')
GO

SET XACT_ABORT ON

BEGIN TRAN

-- Aggiorno le righe esistenti
UPDATE Finale SET
Finale.F1 = #TempTable.F1,
Finale.F2 = #TempTable.F2
FROM Finale, #TempTable
WHERE Finale.ID = #TempTable.ID

-- Inserisco le nuove righe
INSERT INTO Finale (ID, F1, F2)
SELECT ID, F1, F2 FROM #TempTable T
WHERE T.ID NOT IN (SELECT ID FROM Finale)

COMMIT TRAN
GO

-- Elimino la tabella temporanea
SET NOCOUNT ON
DROP TABLE #TempTable

-- Risultato
SET NOCOUNT ON
SELECT * FROM Finale
GO

> nel caso sia andato tutto per il verso giusto a questo punto bisognerebbe
> effettuare una drop table della vecchia tabella e rinominare quella nuova.
>
> E' una cosa fattibile?????

Si :-)

Se ti server c'è anche questo bellissimo programma, free, che ti risolve
questi problemi:

http://www.sqlscripter.com/

>
> Ciao
> Ciccio

Bye


--
Davide Mauri
www.davidemauri.it


ciccio

unread,
Dec 16, 2004, 11:15:03 AM12/16/04
to
[cut]

> ......mmmm.....io non ho assolutamente tenuto conto dei dati. Il mio tool e

> la mia necessità era "semplicemente" quella di confrontare e scoprire le
> differenze nella struttura della tabella, non nei dati in essa contenuti.

[cut]

ti spiego le mike necessità:
ho un applicazione (funzionante e che utilizzo regolarmente)che utilizza un
db (chiamiamolo 'db1'),

effettuo delle modifiche al programma e delle modifiche al db;

a questo punto io ho un programma versione 1.0 (che utilizza 'db1') e un
programma versione 2.0 che utilizza una versione aggiornata di db1 (che
chiameremo db2);

per le modifiche al programma non ci sono problemi, ma per l'aggiornamento
di 'db1' -->> 'db2' come la effettuo??

Non voglio utilizzare dei DTS perchè a volte capita di dover modificare il
tipo di dati di una colonna e questo mi genera degli errori, inoltre avevo
l'intenzione di utilizzare lo stesso tool per diversi tipi di db (in
particolare db di MS foxpro)


ciao
Ciccio

Davide Mauri

unread,
Dec 17, 2004, 10:27:29 AM12/17/04
to
Ciao

è la stessa situazione che ho vissuto io, per questo mi sono fatto il
DaBCoS.

Il problema fondamentale è la struttura delle tabelle e gli oggetti del db
(SP e VIEW nel mio caso). A questo punto io tramite la mia utility
analizzavo le differenze, e poi modificavo gli oggetti sul db meno
aggiornato. Come? Facendomi generare gli script dal database più aggiornato.
Per le tabelle invece facevo a mano l'alter table necessario.

Per ora l'ultima versione funzionante di DaBCos, ossia la 0.2, permette il
confronto al max fra SQL Server 7 e 2000. Quella su cui sto lavorando
(mooolto lentamente) permetterò il confronto e la sincronizzazione anche su
db diversi. Sono ancora in uno stadio molto inziale però....


--
Davide Mauri
www.davidemauri.it

"ciccio" <cic...@discussions.microsoft.com> wrote in message

news:3FFDC470-9EB2-4660...@microsoft.com...

Luigi

unread,
Jul 28, 2006, 4:53:01 AM7/28/06
to
Ciao Lorenzo,
se volessi aggiornare una tabella con le differenze presenti in una copia di
essa su un altro database, come dovrei fare?

Stavo provando questo:

use DB1
insert GERARCHIE A
select * from DB2.dbo. B
where A.cod_gerarchia <> B.cod_gerarchia

dove cod_gerarchia è la chiave primaria della tabella.
Ti ringrazio


"Lorenzo Benaglia" ha scritto:

Luca Bianchi

unread,
Jul 28, 2006, 5:16:59 AM7/28/06
to
Luigi wrote:
> Ciao Lorenzo,
> se volessi aggiornare una tabella con le differenze presenti in una
> copia di essa su un altro database, come dovrei fare?
>
> Stavo provando questo:

Devi procedere con una triplice istruzione

============================
--eliminazione dei record non piů presenti
DELETE dbo.Destinazione
WHERE PK NOT IN (SELECT PK FROM dbo.Origine)


--aggiornamento dei record modificati
UPDATE
SET campo1 = O.campo1,
campo2 = O.campo2,
...,
campon = O.campon
FROM dbo.Origine O INNER JOIN dbo.Destinazione D
ON O.PK = D.PK
WHERE campo1 <> O.campo1
OR campo2 = O.campo2
OR ...
OR campon = O.campon


--inserimento dei nuovi
INSERT dbo.Destinazione
SELECT O.*
FROM dbo.Origine O LEFT JOIN dbo.Destinazione D
ON O.PK = D.PK
WHERE D.PK IS NULL
============================


Bye

--
Luca Bianchi

0 new messages