2015-01-15 8 views
5

Ich benutze Microsoft SQL Server und es scheint, dass ich dieses Problem nicht umgehen kann.SQL Server: Drop-Spalte @ Variable funktioniert nicht

Ich habe eine Tabelle, auf der ich einige dynamische und statische Spalten haben werde.

Statische Spalten sind Name des Produkts, Produkttyp und die dynamischen Daten wären einige Produktionsdaten aus den laufenden Monaten.

Am jedem Anfang des Monats habe ich die letzten Monat von den dynamischen Spalten fallen zu lassen und ein neuer Monat bis zum Ende der Tabelle hinzufügen

Meine Lösung war die Rettung der Name der Spalte in eine lokale Variable und dann fügen Sie es der alter-Anweisung hinzu. Aber dies nicht funktioniert, es hält mir wie unter einem Fehler geben:

Msg 102, Ebene 15, Status 1, Zeile 18
falsche Syntax nahe '@month_b'

Ich werde jetzt Fügen Sie die Abfragen

declare @month_t char(15) 
declare @month_b char(15) 
declare @sql char(30) 

set @month_b = (SELECT top 1 name 
       FROM sys.columns 
       WHERE object_id = OBJECT_ID('dbo.ct_test') 
        AND name != 'TTNR' AND name != 'Family' AND name like '%B%' 
       ORDER BY name ASC) 

set @month_t = (SELECT top 1 name 
       FROM sys.columns 
       WHERE object_id = OBJECT_ID('dbo.ct_test') 
        AND name != 'TTNR' AND name != 'Family' AND name like '%T%' 
       ORDER BY name ASC) 

alter table ct_test 
    drop column @month_b 

Ich kann keine Lösung für dieses Problem finden, können Sie mir helfen.

Vielen Dank im Voraus

+0

Dies scheint nicht wie ein gutes Design, btw verwenden müssen. Das regelmäßige Hinzufügen und Löschen von Spalten ist für mich ein Code-Geruch. –

Antwort

4

Sie Dynamic Query

Declare @sql nvarchar(max) 

set @sql = 'alter table ct_test drop column '+ @month_b 

Exec sp_executesql @sql 

set @sql = 'alter table ct_test drop column '+ @month_t 

Exec sp_executesql @sql 
+0

Es gibt mir einen anderen Fehler: Msg 214, Ebene 16, Status 2, Prozedur sp_execute, Linie 1 Prozedur erwartet Parameter '@handle' vom Typ 'int'. –

+0

@CaluserIstvan - Entschuldigung, es sollte 'sp_executesql' anstelle von' sp_execute' sein. Aktualisiert Check jetzt –

+0

Vielen Dank, das funktioniert !! –

Verwandte Themen