Frage

Ich bin mit der Funktion Sp_spaceused die Details aller Tabellen in einem DB zu bekommen. Die index_size Spalte zurückgegeben VARCHAR komplett mit ‚KB‘ am Ende jedoch mag ich in MB angezeigt werden soll. Ich muß wissen, alles ist, wie das KB Streifen aus, ich den Rest tun können! : D

UPDATE:. Ich fühle mich nicht ein Duplikat der anderen Frage vorgeschlagen ist, wie ich war für eine SQL einzige Lösung suchen, die in diesem Thread gegeben wurden

War es hilfreich?

Lösung

REPLACE (Spalte 'KB', ''). Keine Notwendigkeit für LEN und andere Sachen

Auf SQL 2005, dies werden Sie den "reserviert" Wert:

SELECT
    SUM(au.total_pages) / 128.0 AS UsedMB
FROM
    sys.allocation_units au

Einige weitere Untersuchung sollte Ihnen ermöglichen, Index vs Datenraum aus den CATLOG Ansichten zu

zu lesen

Andere Tipps

Mein erster Gedanke wäre, nur in einer Variablen speichert in und nur String verwendet die letzten Zeichen zu entfernen.

-- Setup
DECLARE @data VARCHAR(50)
SET @data = '159736 KB'

-- Computation
SET @data = SUBSTRING(@data, 1, LEN(@data)-2)

-- Conversion
SELECT CAST(@data AS INTEGER)

Weitere generische Lösung:

-- Test data
DECLARE @StrIn VARCHAR(100), @StrOut VARCHAR(100), @I INT, @Len INT
  SELECT @StrIn = '123m43 5m409', @StrOut = '', @I = 0, @Len = Len(@StrIn)

-- Answer
WHILE (@I < @Len) BEGIN 
  SELECT @I = @I + 1, 
    @StrOut = @StrOut + 
      CASE 
        WHEN (CAST(ASCII(SUBSTRING(@StrIn, @I, 1)) AS INT) BETWEEN 47 AND 58) 
        THEN SUBSTRING(@StrIn, @I, 1) ELSE '' 
      END 
END

SELECT @StrIn, @StrOut

Allgemeine Lösung für T-SQL (SS 2008+), alle zu entfernen, aber eine Reihe von erlaubten Zeichen:

DECLARE @StrIn varchar(20)='(323)-555-1212'; -- input value    
DECLARE @Allowed varchar(20)='%[0123456789]%'; -- pattern for allowed characters.

DECLARE @Result varchar(20)=''; -- result    
DECLARE @I int = patindex(@Allowed, @StrIn);

WHILE (@I>0)
begin

    SET @Result = @Result + SUBSTRING(@StrIn, @I, 1); -- add allowed charcter.
    set @StrIn = SUBSTRING(@StrIn, @I+1, 20); -- take rest of string.
    SET @i = patindex(@Allowed, @StrIn); 
END

PRINT @Result;

Dies könnte leicht in eine skalare Funktion eingekapselt werden. Hart Code für spezielle Zwecke Eine ganz allgemeine Funktion würde die Liste der zulässigen Zeichen akzeptieren, oder man kann (wie diese).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top