Sembra che vogliano restituire solo i campi consentiti, il che significa che anche il numero di campi restituiti deve essere dinamico. Questo funzionerà con 2 variabili. Qualcosa di più sarà confuso.
IF (selectField1 = true AND selectField2 = true)
BEGIN
SELECT Field1, Field2
FROM Table
END
ELSE IF (selectField1 = true)
BEGIN
SELECT Field1
FROM Table
END
ELSE IF (selectField2 = true)
BEGIN
SELECT Field2
FROM Table
END
SQL dinamico aiuterà con i multipli. Questo esempio presuppone che la colonna atleast 1 sia vera.
DECLARE @sql varchar(MAX)
SET @sql = 'SELECT '
IF (selectField1 = true)
BEGIN
SET @sql = @sql + 'Field1, '
END
IF (selectField2 = true)
BEGIN
SET @sql = @sql + 'Field2, '
END
...
-- DROP ', '
@sql = SUBSTRING(@sql, 1, LEN(@sql)-2)
SET @sql = @sql + ' FROM Table'
EXEC(@sql)
fonte
2009-06-24 13:49:28
Quello che voglio fare è in realtà molto più complesso della semplice scelta di selezionare 1 o 2 campi. Ho un sacco di campo che ho bisogno di essere in grado di selezionare in modo dinamico, così come fare un WHERE su alcuni settori, ad esempio: @ whereField1 = 1 @ whereField2 = 1 @ whereField3 = 0 ecc e quindi fare un WHERE su Field1 solo se @ whereField1 = 1 ecc. Mi sembra che il tuo secondo esempio potrebbe essere l'unico modo per farlo davvero. Quanti caratteri è varchar (MAX)? – Karl
SQL 2005 può memorizzare fino a 8000 caratteri. –
@Justin varchar (max) in SQL2005 non è limitato a 8000 caratteri. varchar (max) è stato introdotto in SQL 2005 come una sorta di sostituzione del tipo di dati di testo con il supporto delle funzioni disponibili per varchar. – kristof