Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
IF, ELSE, END con Versione 2000/2008
giovedì 19 maggio 2011 - 14.14
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gsflash80
Profilo
| Junior Member
95
messaggi | Data Invio:
gio 19 mag 2011 - 14:14
ciao a tutti, sto provando continuamente con IF se la versione è vecchia, farà un trigger, altrimenti fare il FK con set null.
ho fatto in questo modo:
DECLARE @versione NVARCHAR(128)
DECLARE @minoreversione int
SET @versione = CAST(SERVERPROPERTY('productversion') AS NVARCHAR)
SET @versione = SUBSTRING(@versione,1,CHARINDEX('.',@versione)-1)
SET @minoreversione = CAST(@versione AS INT)
IF @minoreversione < 9
ALTER TRIGGER [DOCSPADM].tr_set_null_dpa_dispositivi_stampa ON [DOCSPADM].dpa_dispositivi_stampa FOR DELETE
AS
DECLARE @rows_effected int
BEGIN
IF @@ROWCOUNT=0 RETURN
UPDATE [DOCSPADM].DPA_AMMINISTRA
SET ID_DISPOSITIVO_STAMPA = NULL
WHERE ID_DISPOSITIVO_STAMPA NOT IN (SELECT DISTINCT id FROM DOCSPADM.dpa_dispositivi_stampa))
print 'proprio 2000!!'
END
ELSE
ALTER TABLE [DOCSPADM].[DPA_AMMINISTRA] WITH CHECK ADD FOREIGN KEY([ID_DISPOSITIVO_STAMPA])
REFERENCES [DOCSPADM].[DPA_DISPOSITIVI_STAMPA] ([Id])
ON DELETE SET NULL
print 'NON 2000!!'
ho provato in diversi modi e mi risulta sempre l'errore di trigger, else e SET
Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'TRIGGER'.
Msg 170, Level 15, State 1, Line 16
Line 16: Incorrect syntax near ')'.
Msg 156, Level 15, State 1, Line 19
Incorrect syntax near the keyword 'ELSE'.
Msg 156, Level 15, State 1, Line 22
Incorrect syntax near the keyword 'SET'.
per una piccola cosa, mi sto un pò sbattendo la testa :D Grazie
----
..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard
boccia75
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 19 mag 2011 - 17:41
Prova così:
DECLARE @versione NVARCHAR(128)
DECLARE @minoreversione int
declare @query nvarchar(4000)
SET @versione = CAST(SERVERPROPERTY('productversion') AS NVARCHAR)
SET @versione = SUBSTRING(@versione,1,CHARINDEX('.',@versione)-1)
SET @minoreversione = CAST(@versione AS INT)
IF @minoreversione < 9
set @query='
ALTER TRIGGER [DOCSPADM].tr_set_null_dpa_dispositivi_stampa ON [DOCSPADM].dpa_dispositivi_stampa FOR DELETE
AS
DECLARE @rows_effected int
BEGIN
IF @@ROWCOUNT=0 RETURN
UPDATE [DOCSPADM].DPA_AMMINISTRA
SET ID_DISPOSITIVO_STAMPA = NULL
WHERE ID_DISPOSITIVO_STAMPA NOT IN (SELECT DISTINCT id FROM DOCSPADM.dpa_dispositivi_stampa)
print ''proprio 2000!!''
END'
ELSE
set @query='
ALTER TABLE [DOCSPADM].[DPA_AMMINISTRA] WITH CHECK ADD FOREIGN KEY([ID_DISPOSITIVO_STAMPA])
REFERENCES [DOCSPADM].[DPA_DISPOSITIVI_STAMPA] ([Id])
ON DELETE SET NULL
print ''NON 2000!!'''
EXEC sp_executesql @query;
Ciao
ps
ho tolto anche una parentesi chiusa dalla stringa
WHERE ID_DISPOSITIVO_STAMPA NOT IN (SELECT DISTINCT id FROM DOCSPADM.dpa_dispositivi_stampa)
gsflash80
Profilo
| Junior Member
95
messaggi | Data Invio:
gio 19 mag 2011 - 18:25
sta andando meglio, però ho modificato create trigger, non alter perchè non era mai creato.
poi il messaggio è scritto "Command(s) completed successfully."
ma non ha stampato "proprio 2000!!" e infatti sono andato a vedere sulla tabella, non è stato creato trigger, secondo te che cosa sarebbe?
Grazie
----
..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard
boccia75
Profilo
| Junior Member
109
messaggi | Data Invio:
ven 20 mag 2011 - 12:24
Al posto di EXEC sp_executesql @query; scrivi PRINT @query (così vedi come viene composta la query), copia e lancia l'istruzione che ti viene riportata.
Da qui capisci per quale motivo eventualmente non funziona.
Ciao.
gsflash80
Profilo
| Junior Member
95
messaggi | Data Invio:
lun 23 mag 2011 - 11:07
grazie, ecco il perchè non vedevo il trigger, si trova in dpa_dispositivo, non in dpa_amministra.
Buon inizio della settimana e grazie ancora
----
..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !