Frage

SQL Server 2008 Express >> Visual Web Developer >> C #

Ich bin Aufzeichnungen aus der Tabelle wie folgt ziehen:

SELECT Name, Category, Review FROM ReviewTable

Das funktioniert gut, aber der Review-Feld Typ in SQL Server ist ein Text und ist sehr lang (man denke an einen Zeitungsartikel).

Ich mag nur für jede Zeile, die ersten vier Zeilen aus dem Bewertungsbereich ziehen und sie in meinem Repeater-Steuerelement angezeigt werden soll. Diese Linien werden wie ein Teaser des Artikels sein.

Ist das möglich? Wie kann es erreicht werden?

War es hilfreich?

Lösung

Dies gibt diese ersten 1000 Zeichen aus dem Bericht.

SELECT Name, Category, CAST(Review AS VARCHAR(1000) FROM ReviewTable

Wenn Sie die ersten vier Zeilen, die Sie benötigen, müssen einige Split-Funktion zu verwenden. Das könnte funktionieren:

CREATE FUNCTION [dbo].[Split]
(
    @SearchString VARCHAR(8000),
    @Separator VARCHAR(5),
    @MaxItems INT
)
RETURNS @strtable TABLE (strval VARCHAR(8000))
AS

BEGIN
DECLARE @tmpStr VARCHAR(8000), @intSeparatorLength INT, @counter int

IF @MaxItems IS NULL
    SET @MaxItems = 2147483647 -- max int

SET @intSeparatorLength = LEN(@Separator)
SET @Counter = 0

SET @tmpStr = @SearchString
    WHILE 1=1 BEGIN
        INSERT INTO @strtable VALUES ( SUBSTRING(@tmpStr, 0 ,CHARINDEX(@Separator, @tmpStr)))
        SET @tmpStr = SUBSTRING(@tmpStr,CHARINDEX(@Separator,@tmpStr)+LEN(@Separator),8000)
        SET @counter = @counter + 1     
        IF (CHARINDEX(@Separator,@tmpStr) < 1 OR @counter >= @MaxItems)
            BREAK
    END

RETURN
END

Verbrauch: select * from dbo.split('aaa**bbbb**CCCC**dddd**eeee**dffff**ggggg', '**', 4)

Andere Tipps

Nun kann der erste für die Linien etwas schwieriger sein, aber warum nicht nur die ersten 250 Zeichen setzen oder so?

SELECT Name, Category, SubString(Review, 1, 250) AS Review FROM ReviewTable

Wenn Ihr Datenbankserver im gleichen lokalen Netzwerk wie Ihr Webserver ist, denke ich, dass ich wahrscheinlich das gesamte Feld wählen würde, da man es überhaupt ist erreichbar. Sie werden immer noch einen Nachschlag für den Zugriff alle Daten in diesem Bereich, so SQL-Performance-weise zum Auffinden der Daten, die ein Nicht-Thema ist zu tun. Der einzige Nachteil des gesamten Feldes Abrufen wäre die Menge der Daten zwischen den Servern übergeben. Also: wenn sie im selben Netzwerk sind, dann würde ich sagen, dass dies auf jeden Fall billiger wäre mit jedem Datensatz bei der Auswahl als Manipulation. Es gibt Ihnen auch die Möglichkeit, Ihre Antwort zwischenzuspeichern, so dass Sie nicht die Datenbank erneut treffen müssen, wenn der Benutzer die Vollversion des Textes zu sehen.

Aber, um Ihre Frage zu beantworten, sollte der folgende es wahrscheinlich tun, obgleich es ziemlich klebrig aussieht

SELECT Name, Category, left(convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review))+1)+1)+1)-1) FROM ReviewTable

... hrrm, ja, wirklich, ich würde mein erster Absatz betrachten

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