0
Ich habe versucht, eine große Datenbank mit dynamischen Spalten zu deaktivieren, während zwei indizierte Spalten beibehalten. Ich kann es nicht als neue Tabelle in SQL Server Management Studio als neue Tabelle speichern. Im Moment bekomme ich 'Eine INSERT-Anweisung kann keine SELECT-Anweisung enthalten, die einer Variablen Werte zuweist.'Erstellen Sie eine neue Tabelle mit Unpivot und dynamischen Spalten
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
create table pivot_columns ([Prime Item Nbr] NVARCHAR(MAX), [Store Nbr] NVARCHAR(MAX))
insert into pivot_columns
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(column_name)
FROM information_schema.columns
WHERE table_name = 'POSSalesMicro'
AND COLUMN_NAME <> 'Prime Item Nbr'
AND COLUMN_NAME <> 'Store Nbr'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SELECT @query = 'WITH Unpivoted
AS
(
SELECT [Prime Item Nbr], [Store Nbr], columns, value
FROM POSSalesMicro
UNPIVOT
(
columns
FOR value IN('+ @cols + ')
) AS u
)
SELECT
[Prime Item Nbr],
[Store Nbr],
columns,
CAST(CASE WHEN value LIKE ''% POS Sales'' THEN REPLACE(value,''POS Sales'', '''')
WHEN value LIKE ''LR%'' THEN REPLACE(value,''LR '', '''')
END AS INT) AS WMWeek
FROM Unpivoted';
EXECUTE(@query);
Zum ersten Mal habe ich dynamische mit Pivot gesehen. Beginnt an diesem Punkt hart zu debuggen, haha. +1 – scsimon