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