0

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

我正在从表中提取记录,如下所示:

SELECT Name, Category, Review FROM ReviewTable

这工作正常,但 SQL Server 中的 Review 字段类型是文本并且很(想想杂志文章)。

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

这可能吗?如何实现?

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 回答