Gerade jetzt Ihr Code erstellen und diese Anweisung ausführen:
SELECT [Column],[Count]
FROM
(
SELECT
datalength([ParentID]) as [ParentID] ,
datalength([Content]) as [Content],
datalength([Intermediate]) as [Intermediate] ,
datalength([SnapshotDataID]) as [SnapshotDataID] ,
datalength([LinkSourceID]) as [LinkSourceID],
datalength([Property]) as [Property],
datalength([Description]) as [Description],
datalength([Hidden]) as [Hidden],
datalength([MimeType]) as [MimeType],
datalength([SnapshotLimit]) as [SnapshotLimit],
datalength([Parameter]) as [Parameter],
datalength([ExecutionTime]) as [ExecutionTime],
datalength([SubType]) as [SubType],
datalength([ComponentID]) as [ComponentID]
FROM **<YOUR TABLE>**
) AS p
UNPIVOT
(
[Count] for [Column] IN
(
[ParentID] ,[Content] ,[Intermediate] ,[SnapshotDataID] ,[LinkSourceID] ,[Property] ,[Description] ,
[Hidden] ,[MimeType] ,[SnapshotLimit] ,[Parameter] ,[ExecutionTime] ,[SubType] ,[ComponentID]
)
) AS unpvt
Was ich denke, die Sie suchen, ist eine dynamische SQL-Anweisung, die das schafft: dynamisch diese Aussage erstellen Um
SELECT [column], [count] = MAX([count])
FROM
(
SELECT [Column],[Count]
FROM
(
SELECT
datalength([ParentID]) as [ParentID] ,
datalength([Content]) as [Content],
datalength([Intermediate]) as [Intermediate] ,
datalength([SnapshotDataID]) as [SnapshotDataID] ,
datalength([LinkSourceID]) as [LinkSourceID],
datalength([Property]) as [Property],
datalength([Description]) as [Description],
datalength([Hidden]) as [Hidden],
datalength([MimeType]) as [MimeType],
datalength([SnapshotLimit]) as [SnapshotLimit],
datalength([Parameter]) as [Parameter],
datalength([ExecutionTime]) as [ExecutionTime],
datalength([SubType]) as [SubType],
datalength([ComponentID]) as [ComponentID]
FROM **<YOUR TABLE>**
) AS p
UNPIVOT
(
[Count] for [Column] IN
(
[ParentID] ,[Content] ,[Intermediate] ,[SnapshotDataID] ,[LinkSourceID] ,[Property] ,[Description] ,
[Hidden] ,[MimeType] ,[SnapshotLimit] ,[Parameter] ,[ExecutionTime] ,[SubType] ,[ComponentID]
)
) AS unpvt
) x
GROUP BY [column]
Sie würden dies tun:
DECLARE @strTablename varchar(100) = <YOUR TABLE>
DECLARE @strQuery varchar(max) = ''
DECLARE @strSecondQuery varchar(max) = 'SELECT '
DECLARE @strUnPivot as varchar(max) = ' UNPIVOT ([Count] for [Column] IN ('
SELECT @strQuery = ISNULL(@strQuery,'') + 'datalength([' + name + ']) as [' + name + '] ,'
FROM sys.columns
WHERE object_id = object_id(@strTablename) and is_nullable = 1;
SELECT @strUnPivot = ISNULL(@strUnPivot,'') + '[' + name + '] ,'
from sys.columns
where object_id = object_id(@strTablename) and is_nullable = 1;
SET @strQuery = 'SELECT [Column],[Count] FROM (SELECT ' +
SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + @strTablename + ') AS p ' +
SUBSTRING(@strUnPivot,1,LEN(@strUnPivot) - 1) + ')) AS unpvt '
SET @strQuery =
'SELECT [column], [count] = MAX([count]) FROM (' + @strQuery +
') x GROUP BY [column]'
--PRINT @strQuery;
EXEC (@strQuery);
Eine Möglichkeit, die ich dies zu beheben ist, ist mit einem PRIN T-Anweisung, um zu sehen, was mein Dynamic SQL erstellt. Um besser zu verstehen, was hier vor sich geht, würde ich vorschlagen, mehr über die T-SQL UNPIVOT-Anweisung sowie Dynamic SQL zu lernen.
Was bekommen Sie und was versuchen Sie stattdessen zu bekommen? Geben Sie neben den Beschreibungen Beispiele an. –
Ich erhalte doppelten Spaltennamen gegen seine Datenlängen – Batman
Wenn ich in @strQuery anstelle der Datenlänge zählen, ist die Ausgabe korrekt ... aber mit Datenlänge bekomme ich repetitive Spaltennamen.so bin ich sicher, dass ich mit der Verwendung der Datenlänge. – Batman