Newsgroup: it.comp.lang.visual-basic
Titolo: Trigger in SqlServer 2000

Ciao.
Sono alle prime armi con SqlServer 2000 e ho creato un db di prova da
gestire con un applicativo VB.
Vorrei sapere se c'è un modo, per esempio con un trigger o qualcosa di
simile di eliminare gli spazi vuoti iniziali di un valore che viene inserito
in un campo.
Per esempio se nel campo Cognome inserisco "   Rossi" vorrei che nella
tabella venisse memorizzato "Rossi".
Vorrei inoltre sapere come fare in modo che il Trigger venga applicato solo
alla riga corrente.
Per esempio se devo allineare a destra un codice inserito anteponendo il
carattere '0' io ho provato questo trigger:
CREATE TRIGGER PadIDVia ON [dbo].[TabVie]
FOR INSERT, UPDATE
AS UPDATE TabVie SET IDVia = right(replicate('0',5)+ltrim(rtrim(IDVia)),5)
in cui sostituisco il codice inserito. Ma questa operazione influenza tutte
le righe della tabella.
E' possibile fare in modo che l'unico record interessato dal trigger sia
quello su cui sono posizionato?
Grazie.
Skysurfer

Vorrei anche sapere come posso gestire i risultati restituiti da una sp di
sistema.
Per esempio questa sp
exec sp_columns @table_name = 'TabVie', @column_name = 'IDVia'
mi restituisce le informazioni relative al campo IDVia nella tabella TabVie.
Se io volessi memorizzare in una variabile il campo con la dimensione del
campo oppure eseguire una select sul risultato della sp, come mi devo
comportare?
Grazie a tutti.
Skysurfer

beh, non lo posso verificare in questo momento, però basta modificare il
costrutto UPDATE....
aggiungendo una clausola WHERE.....no?
il mio amico manuale di SQL Server 2000, dice che i trigger sono un tipo
particolare di stored procedure......
le sp possono lavorare su un gruppo di record, impostando per l'appunto una
WHERE.....mah......
però ho paura di no, perchè i trigger servono appunto per questo: cioè
eseguire dei comandi SQL quando vengono variati dei dati in tabella, per
evitare che rimangano dati non coerenti, che possano "spezzare" i join con
le altre tabelle......quindi.....
non so.....prova a verificare.....ok?
facci sapere!!!
good coding!!!!
--
Damiani Liborio Igor
idam...@hotmail.com
 - 
igor.d...@light.it
http://www.igordamiani.it
ICQ : 11847262

Si, in effetti basterebbe mettere una clausola Where, ma se il campo che
voglio formattare è quello che viene modificato, come lo gestisco?
Per esempio ho una tabella vie con i campi Codice, Tipo e NomeVia e la
formattazione la devo applicare sul campo Codice.
Inizialmente il codice vale "5", se viene modificato in "6" il Where non
funziona piu'.
Tutto può funzionare se ho una colonna univoca che non puo' essere cambiata
e che posso usare come valore di confronto.
Ma se non ho la colonna? C'e' qualche modo per farlo? Magari usando le
tabelle inserted e deleted (che non ho ancora capito come funzionano!).
Grazie a tutti.
Ciao.
Skysurfer

uff.....mi hai preso alla sprovvista......
cmq, può essere che mi sbagli, però in ogni tabella che si possa rispettare
ci deve sempre essere un campo assolutamente univoco, che sia definito come
chiave primaria.......
di solito io metto sempre un campo ID definito come int, identity (partendo
da 1 e incremento 1)....
in questo modo risolvi ogni problema.......
pensaci!!!!


 AS
daclare @myId as integer
select @myId ="Campo chiave della tabella" from inserted
UPDATE TabVie SET IDVia = right(replicate('0',5)+ltrim(rtrim(IDVia)),5)
where "campo chiave della tabella"=@myID

 Vorrei sapere se c'č un modo, per esempio con un trigger o qualcosa di


Grazie a tutti... siete forti!
Skysurfer