Domanda

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

Sto estraendo i record dal tavolo in questo modo:

SELECT Name, Category, Review FROM ReviewTable

Funziona bene, ma il campo Revisiona Tipo in SQL Server è di testo ed è molto lungo (pensa a un articolo di rivista).

Voglio solo estrarre le prime quattro righe dal campo Revision per ogni riga e visualizzarle nel mio controllo ripetitore. Queste righe saranno come un teaser dell'articolo.

È possibile? Come può essere realizzato?

È stato utile?

Soluzione

Questo restituirà questi primi 1000 caratteri dalla recensione.

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

Se devi avere le prime 4 righe devi usare alcune funzioni di divisione. Questo potrebbe funzionare:

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

Utilizzo: seleziona * da dbo.split ('aaa ** bbbb ** CCCC ** dddd ** eeee ** dffff ** ggggg', '**', 4)

Altri suggerimenti

Bene, il primo per le righe potrebbe essere un po 'più difficile, ma perché non metti semplicemente in evidenza i primi 250 caratteri?

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

Se il tuo server database si trova nella stessa rete locale del tuo server web, penso che probabilmente selezionerei l'intero campo, dal momento che lo stai accedendo a tutti. Dovrai comunque effettuare una ricerca per accedere a qualsiasi dati in quel campo, quindi sql in termini di prestazioni per trovare i dati non è un problema. L'unico aspetto negativo del recupero dell'intero campo sarebbe la quantità di dati passati tra i server. Quindi: se sono nella stessa rete, direi che sarebbe sicuramente più economico che manomettere ogni record durante la selezione. Ti dà anche la possibilità di memorizzare nella cache la tua risposta, in modo da non dover accedere nuovamente al database quando l'utente vuole vedere la versione completa del testo.

Ma, per rispondere alla tua domanda, il seguente dovrebbe probabilmente farlo, anche se sembra piuttosto pacchiano

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, sì, davvero, considererei il mio primo paragrafo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top