2013-07-01 12 views
18
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A') 
BEGIN 
    UPDATE [dbo].[X] 
     SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]); 
END  
    GO 

Desidero combinare le 2 confizioni IF ed eseguire l'aggiornamento solo quando entrambi sono soddisfatti. C'è un modo in cui posso club 2 SE ESISTE?Come posso usare AND condition in IF EXISTS in SQL?

risposta

35

Semplice:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 
AND EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A') 

BEGIN 
    UPDATE [dbo].[X] 
     SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]); 
END  
GO 
+0

Oppure, in realtà guardando il codice, funzionerà come scritto - il 2 ° IF è nidificato sotto il primo. Basta aggiungere schede :) –

+2

Inoltre, dovresti includere TABLE_SCHEMA nella tua query INFORMATION_SCHEMA.COLUMNS, altrimenti otterrai risultati errati se lo stesso nome di tabella esiste in uno schema diverso. –

+0

G, cosa succede se la colonna A o la colonna Y non esiste o viene cancellata? In questo caso sto ottenendo un errore. messaggio 207, livello 16, stato 1, riga 5 Nome colonna "A" non valido. – user811433

6

Non c'è bisogno di selezionare tutte le colonne facendo SELECT *. poiché stai controllando la presenza di righe, fai SELEZIONARE 1 invece per rendere più veloce la query.

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A') 

    BEGIN 
     UPDATE [dbo].[X] 
      SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]); 
    END  
     GO 
+0

Non riceverai mai un record dalla tua query, a meno che in qualche modo 'TABLE_NAME' possa essere sia '' X'' che' 'Z'' allo stesso tempo. Ripeti per "COLUMN_NAME". Inoltre, * dal momento che stai verificando l'esistenza di righe, fai SELEZIONARE 1 invece per rendere più veloce la query. * SQL Server è più intelligente di così. –

+0

sì ..... capito, E dovrebbe essere sostituito da OR? –

+0

No, quindi il comando 'UPDATE' verrebbe eseguito se esistessero 'X.Y' o' Z.A', non entrambi. –

0

Modificare il titolo e la descrizione vuota

UPDATE `li_categories` 
    SET description = CASE 
    WHEN description = '' THEN CONCAT('optional text ', title, ' optional text') 
    ELSE description 
    END 
WHERE 
id 
Problemi correlati