Question

SQL Server 2008 Express > > Développeur Web visuel > > C #

Je sors des disques de la table comme ceci:

SELECT Name, Category, Review FROM ReviewTable

Cela fonctionne bien, mais le champ Review (Réviser) de SQL Server contient du texte et est très long (pensez à un article de magazine).

Je souhaite uniquement extraire les quatre premières lignes du champ Review pour chaque ligne et les afficher dans mon contrôle répéteur. Ces lignes ressembleront à un teaser de l'article.

Est-ce possible? Comment cela peut-il être accompli?

Était-ce utile?

La solution

Ceci renverra les 1000 premiers caractères de la critique.

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

Si vous devez avoir les 4 premières lignes, vous devez utiliser une fonction de partage. Cela pourrait fonctionner:

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

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

Autres conseils

Eh bien, la première pour les lignes peut être un peu plus difficile, mais pourquoi ne pas simplement mettre les 250 premiers caractères environ?

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

Si votre serveur de base de données se trouve sur le même réseau local que votre serveur Web, je pense que je sélectionnerais probablement tout le champ, car vous y accédez. Vous devrez toujours effectuer une recherche pour accéder à toutes les données de ce champ. Par conséquent, la performance de SQL pour la recherche des données ne pose aucun problème. Le seul inconvénient de l'extraction de l'intégralité du champ serait la quantité de données transmise entre les serveurs. Ainsi: s’ils sont dans le même réseau, je dirais que cela serait certainement moins cher que de falsifier chaque enregistrement lors de la sélection. Il vous donne également la possibilité de mettre en cache votre réponse, de sorte que vous n’aurez plus à toucher à la base de données lorsque l’utilisateur souhaite voir la version complète du texte.

Mais, pour répondre à votre question, le texte ci-dessous devrait probablement le faire, même si cela a l'air plutôt collant

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, ouais, vraiment, je considérerais mon premier paragraphe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top