Sql Server 2008 Express >> Visual Web Developer >> C#
我正在从表中提取记录,如下所示:
SELECT Name, Category, Review FROM ReviewTable
这工作正常,但 SQL Server 中的 Review 字段类型是文本并且很长(想想杂志文章)。
我只想从每行的 Review 字段中提取前四行,并将它们显示在我的转发器控件中。这些行就像文章的预告片。
这可能吗?如何实现?
这将从评论中返回前 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,是的,真的,我会考虑我的第一段