2016-05-18 5 views
0

Ich möchte eine Variablentabelle in t-sql mit 13 Spalten (YEAR || Monate) erstellen und die Spaltennamen in einem Array speichern.
Dann mit einer Schleife möchte ich Daten in jeder Spalte eingeben.T-SQL: Wie füge ich Daten zu Spalten hinzu, die in einer Zeichenkette gespeichert sind?

zB:

for i 1..12 
insert into @tablename (@i) 

Ist es möglich? Muss ich einen Cursor erstellen?

+0

Zeigen Sie uns, was Sie bisher versucht haben? – Ako

+0

DECLARE fmth varchar (32) = 'Januar.Februar.März'; DECLARE smth varchar (32) = 'April.Mai.Juni'; DECLARE tmth varchar (32) = 'Juli.August.September'; DECLARE fomth varchar (32) = 'Oktober.November.Dezember'; DEKLAR mth varchar (10); DECLARE ich Tinyint = 3; DECLARE Bericht TABELLE ( \t Jahr smallint, \t int Januar \t int Februar \t int März \t int April \t int Mai \t Juni int, \t int Juli \t int August , \t September int, \t Oktober int, \t November Int, \t Dezember int ) WÄHREND i> 0 BEGIN \t mth = ParseName (fmth, i) \t Einsatz in Report (mth) \t i = i - 1; ENDE – Fili

+0

auch mit @, weil sie Variablen sind, aber ich habe nicht genug Zeit, um herauszufinden, wie man sie hinzufügt – Fili

Antwort

0

Ich bin nicht in der Lage, Ihre Frage richtig zu verstehen, ist das, was Sie suchen?

Der folgende Code wird dreimal durchlaufen und in die entsprechenden Spalten eingefügt.

Hinweis: Sie können Tabellenvariable nicht mit dynamischem SQL implementieren. Zu diesem Zweck müssen Sie die physische oder temporäre Tabelle verwenden.

DECLARE @fmth varchar(32) = 'January.February.March'; 
DECLARE @smth varchar(32) = 'April.May.June'; 
DECLARE @tmth varchar(32) = 'July.August.September'; 
DECLARE @fomth varchar (32) = 'October.November.December'; 
DECLARE @mth varchar(10); 
DECLARE @i INT =3; 

CREATE TABLE #Report 
(Year smallint, January int, February int, March int, April int, May int, June int, July int, August int, 
September int, October int, November int, December int) 

WHILE(@I > 0) 
BEGIN 
    DECLARE @IChar Varchar(5) = CAST(@I AS VArchar(5)) 
    DECLARE @Month1 varchar(20) = PARSENAME(@fmth,@i) 
    DECLARE @Month2 varchar(20) = PARSENAME(@smth,@i) 
    DECLARE @Month3 varchar(20) = PARSENAME(@tmth,@i) 
    DECLARE @Month4 varchar(20) = PARSENAME(@fomth,@i) 

    -- Do Insert operation here 
     DECLARE @MyDynamicSQL VARCHAR(4000) 
     = 'INSERT INTO #Report('[email protected]+','[email protected]+','[email protected]+', '[email protected]+') 
      VALUES ('[email protected]+','[email protected]+','[email protected]Char+','[email protected]+')' 
      EXEC(@MyDynamicSQL) 

    SET @i = @I - 1 
END 
SELECT * FROM #Report 
DROP TABLE #Report 
+0

Ich möchte eine Tabelle erstellen, in der ich die Nettokaufkosten der Kunden anzeigen kann. Ich habe 3 Tabellen, von denen ich die Daten für die Formeln nehme. Ich habe eine Lösung, aber ich brauchte dieses Ding, um einen Ort zu haben, an dem die Daten eingefügt werden können. – Fili

+0

Vielen Dank für die Hilfe. – Fili

Verwandte Themen