2012-03-14 5 views

risposta

4

No. Ci sono modi per codificarlo più rapidamente, ma non ci sono scorciatoie come suggerisci. Tratto da an answer I gave on dba.stackexchange:

DECLARE @tb NVARCHAR(255), @sql NVARCHAR(MAX); 

SET @tb = N'dbo.[table]'; 

SET @sql = N'SELECT * FROM ' + @tb + ' WHERE 1 = 0'; 

SELECT @sql = @sql + N' OR ' + QUOTENAME(name) + ' IS NULL' 
    FROM sys.columns 
    WHERE [object_id] = OBJECT_ID(@tb); 

EXEC sp_executesql @sql; 
+0

Non funzionerà in SQL Server 2005, ma si spera che l'OP saprà cosa fare al riguardo. –

+0

@Andriy Grazie. Corretto. Mi prendo sempre su quello, a volte mi manca. In questo caso l'ho copiato da una domanda del 2008. –

+0

Sei il benvenuto. :) –

0

Questo dipende da ciò che i mezzi più rapidi.

Se si intende eseguire più rapidamente l'esecuzione di SQL Server, è possibile scrivere un trigger piuttosto che aggiornare una colonna di bit che specifica se l'intera riga (diversa dal bit e dalla chiave primaria) è NULL. Ma, ci dovrebbe essere una VERA buona ragione per questo in quanto avrà un impatto sulle prestazioni di aggiornamento. Anche gli indici su quelle colonne sarebbero di aiuto.

Se si intende più veloce da scrivere, è possibile che SQL generi la clausola where per l'utente. Ma, a meno che tu non lo faccia molto, non vale la pena il tempo a mio avviso.

1

insegnamento-a-fish-invece-di-dare-you-the-pesce tipo di risposta qui:

Un modo per farlo è attraverso la creazione di una stored procedure che assembla e gestisce una query dinamica.

La procedura immagazzinata sarà:

  • avere un nome tabella come parametro di ingresso.
  • interrogare le tabelle del sistema di metadati per la struttura di tabella specifica.
  • assemblare dinamicamente una stringa (la query effettiva) con le istruzioni OR per le colonne di tale tabella.
  • esegue la query assemblata e restituisce il risultato.
2

È possibile trovare i nomi delle colonne utilizzando qualcosa di simile:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table_name> 

Poi, vorrei scrivere una procedura di utilizzo di questo, e che sarebbe un ciclo tra le voci della tabella ei nomi delle colonne.

Fonte: http://codesnippets.joyent.com/posts/show/337