0

Sql Server 2008 Express >> Visual Web 開発者 >> C#

次のようにテーブルからレコードを引き出しています。

SELECT Name, Category, Review FROM ReviewTable

これは正常に機能しますが、SQL Server の Review フィールドの Type はテキストであり、非常に長い(雑誌の記事を考えてください)。

各行の [レビュー] フィールドから最初の 4 行だけを取り出して、リピーター コントロールに表示したいだけです。これらの行は、記事のティーザーのようなものになります。

これは可能ですか?どうすればそれを達成できますか?

4

3 に答える 3

1

これにより、レビューからこの最初の1000文字が返されます。

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

最初の4行が必要な場合は、分割関数を使用する必要があります。これはうまくいく可能性があります:

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

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

于 2009-11-27T08:51:24.607 に答える
1

さて、最初の行は少し難しいかもしれませんが、最初の250文字程度を出してみませんか?

SELECT Name, Category, SubString(Review, 1, 250) AS Review FROM ReviewTable
于 2009-11-27T08:52:11.980 に答える
0

データベース サーバーが Web サーバーと同じローカル ネットワークにある場合は、フィールド全体にアクセスしているので、おそらくフィールド全体を選択すると思います。そのフィールドのデータにアクセスするにはルックアップを行う必要があるため、データを見つけるための SQL パフォーマンスは問題ではありません。フィールド全体を取得することの唯一の欠点は、サーバー間で渡されるデータの量です。したがって、それらが同じネットワーク内にある場合、選択中に各レコードを改ざんするよりも、これは間違いなく安価になると思います. また、応答をキャッシュする機能も提供されるため、ユーザーがテキストの完全なバージョンを見たい場合にデータベースに再度アクセスする必要はありません。

しかし、あなたの質問に答えるために、以下はおそらくそれを行うべきですが、かなり粘着性があります

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、ええ、本当に、最初の段落を検討します

于 2009-11-27T09:02:31.943 に答える