سؤال

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

أنا سحب السجلات من الجدول مثل هذا:

SELECT Name, Category, Review FROM ReviewTable

هذا يعمل بشكل جيد ولكن الاستعراض نوع الحقل في SQL Server هو النص جدا طويلة (أعتقد مجلة المادة).

أريد فقط أن سحب الأسطر الأربعة الأولى من الاستعراض الميداني لكل صف ، وعرضها في بلدي مكرر التحكم.هذه الخطوط سوف يكون مثل دعابة من هذه المادة.

هل هذا ممكن ؟ كيف يمكن تحقيق ذلك ؟

هل كانت مفيدة؟

المحلول

هذا سيعود هذا أول 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

إذا كان لديك ملقم قاعدة البيانات في نفس الشبكة المحلية مثل خادم الويب الخاص بك ، أعتقد أنني حدد الحقل بأكمله ، بما أنك الوصول إليه على الإطلاق.سوف لا يزال لديك للقيام بحث للوصول إلى أي البيانات في هذا المجال ، لذلك الأداء sql-الحكمة من أجل العثور على البيانات غير هذه المسألة.الجانب السلبي الوحيد لاسترجاع الحقل بأكمله سيكون مقدار البيانات التي يتم نقلها بين الخوادم.وبالتالي:إذا كانوا في نفس الشبكة, أنا أقول هذا سيكون بالتأكيد أرخص من العبث مع كل سجل خلال اختيار.كما أنه يتيح لك القدرة على ذاكرة التخزين المؤقت الاستجابة الخاصة بك بحيث لم يكن لديك لضرب قاعدة البيانات مرة أخرى عندما يريد المستخدم مشاهدة النسخة كاملة النص.

ولكن للإجابة على سؤالك أدناه ربما ينبغي أن تفعل ذلك ، altho يبدو بدلا مبتذل

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, نعم, حقا, كنت في الفقرة الأولى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top