SQLテキストフィールドから最初の4行のみを選択します
質問
Sql Server 2008 Express>>ビジュアルウェブデベロッパー>> C#
このようにテーブルからレコードを引き出しています:
SELECT Name, Category, Review FROM ReviewTable
これは正常に機能しますが、SQL Serverの[レビュー]フィールドタイプはテキストであり、非常に長い長い(雑誌の記事を考えてください)。
各行の[レビュー]フィールドから最初の4行だけを引き出して、リピーターコントロールに表示します。これらの行は記事のティーザーのようになります。
これは可能ですか?どうすれば達成できますか?
解決
これにより、レビューからこの最初の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)
他のヒント
さて、最初の行はもう少し難しいかもしれませんが、なぜ最初の250文字ほどを出さないのですか?
SELECT Name, Category, SubString(Review, 1, 250) AS Review FROM ReviewTable
データベースサーバーが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、ええ、本当に、最初の段落を検討します