从Sql文本字段中仅选择前四行

时间:2009-11-27 08:44:29

标签: c# sql textfield

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

我正在将记录拉出表格:

SELECT Name, Category, Review FROM ReviewTable

这很好但SQL Server中的Review字段类型是文本,非常(想想杂志文章)。

我只想从每行的Review字段中拉出前四行,并在我的转发器控件中显示它们。这些文字就像是文章的预告片。

这可能吗?如何实现?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

嗯,行的第一个可能有点困难,但你为什么不先输出前250个字符呢?

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

答案 2 :(得分: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,是的,真的,我会考虑我的第一段