IF, ELSE, END con Versione 2000/2008

giovedì 19 maggio 2011 - 14.14

gsflash80 Profilo | Junior Member

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

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

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

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

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
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5