79 Stimmen

Größe des VARBINARY-Feldes in SQL Server 2005

Ich versuche, die Größe in Bytes des Inhalts in einer VARBINARY(MAX) Feld in SQL Server 2005, unter Verwendung von SQL. Da ich bezweifle, dass es native Unterstützung für diese, könnte es mit CLR-Integration getan werden? Für jede Idee wäre ich sehr dankbar.

143voto

mwigdahl Punkte 15620

Tatsächlich können Sie dies in T-SQL tun!

DATALENGTH(<fieldname>) wird arbeiten an varbinary(max) Felder.

6 Stimmen

Gibt die Anzahl der Bytes zurück

34voto

John Sansom Punkte 40295

Das Feld VARBINARY(MAX) weist Daten variabler Länge bis zu einer Größe von knapp 2 GB zu.

Sie können die Funktion DATALENGTH() verwenden, um die Länge des Spalteninhalts zu bestimmen.

Zum Beispiel:

SELECT DATALENGTH(CompanyName), CompanyName
FROM Customers

1voto

Meysam Ghorbani Punkte 45
CREATE FUNCTION [dbo].[FileDataSizeUnit_FN] (@FileData VARBINARY(MAX))
RETURNS VARCHAR(3)
AS
    BEGIN 
        DECLARE @Unit VARCHAR(3),
            @ByteLen AS NUMERIC(16,2)

        SET @ByteLen = ISNULL(DATALENGTH(@FileData),0)

        SET @Unit = CASE WHEN @ByteLen < 1000 THEN 'B'
        WHEN @ByteLen < 100000 THEN 'KB'
        WHEN @ByteLen < 1000000000 THEN 'MB'
        ELSE 'GB' END

        RETURN  @Unit
    END
GO

CREATE FUNCTION [dbo].[FileDataSize_FN] (@FileData VARBINARY(MAX))
RETURNS NUMERIC(16,2)
AS
    BEGIN 
        DECLARE @Size AS NUMERIC(16,2),
            @ByteLen AS NUMERIC(16,2)

        SET @ByteLen = ISNULL(DATALENGTH(@FileData),0)

        SET @Size = CASE WHEN @ByteLen <1000 THEN @ByteLen
        WHEN @ByteLen < 100000 THEN @ByteLen/1024.0 
        WHEN @ByteLen < 1000000000 THEN @ByteLen/1024.0/1024 
        ELSE CAST(@ByteLen/1024.0/1024/1024 AS NUMERIC(16,2)) END

        RETURN  @Size
    END
GO

SELECT dbo.FileDataSize_FN(F.FileData) AS Size,
        dbo.FileDataSizeUnit_FN(F.FileData) AS SizeUnit
    FROM dbo.Files_Tbl F

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X