Pergunta

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

Eu estou puxando registros fora da tabela como esta:

SELECT Name, Category, Review FROM ReviewTable

Isso funciona bem, mas o campo avaliação Tipo no SQL Server é um texto e é muito longo (acho que um artigo de revista).

Eu só quero puxar as primeiras quatro linhas do campo revisão para cada linha, e exibi-los em meu controle repetidor. Estas linhas serão como um teaser do artigo.

Isso é possível? Como é que pode ser feito?

Foi útil?

Solução

Isso irá retornar este primeiro 1000 caracteres a partir da revisão.

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

Se você deve ter as 4 primeiras linhas você precisa usar alguma função split. Isso poderia funcionar:

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

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

Outras dicas

Bem, a primeira para as linhas pode ser um pouco mais difícil, mas por que você não apenas colocar para fora os primeiros 250 caracteres ou menos?

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

Se o seu servidor de banco de dados está na mesma rede local que o servidor web, eu acho que eu provavelmente selecionar o campo inteiro, desde que você está acessando-lo em tudo. Você ainda vai ter que fazer uma pesquisa para o acesso qualquer dados nesse campo, então sql em termos de performance para encontrar os dados é uma não-questão. A única desvantagem de recuperar todo o campo seria a quantidade de dados transmitidos entre os servidores. Assim: se eles estão na mesma rede, eu diria que esta seria sem dúvida mais barato do que mexer com cada registro durante a seleção. Ela também lhe dá a capacidade de armazenar em cache sua resposta, de modo que você não tem que bater o banco de dados novamente quando o usuário quer ver a versão completa do texto.

Mas, para responder à sua pergunta, a seguir provavelmente deve fazê-lo, altho parece bastante brega

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, sim, realmente, eu considero meu primeiro parágrafo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top