سؤال

وعندي استفسار SQL التي من المفترض أن تنسحب رقما قياسيا وCONCAT كل لسلسلة، ثم إخراج هذه السلسلة. جزء مهم من الاستعلام أدناه.

DECLARE @counter int;
SET @counter = 1;

DECLARE @tempID varchar(50);
SET @tempID = '';

DECLARE @tempCat varchar(255);
SET @tempCat = '';

DECLARE @tempCatString varchar(5000);
SET @tempCatString = '';

WHILE @counter <= @tempCount
BEGIN

    SET @tempID = (
    SELECT [Val]
    FROM #vals
    WHERE [ID] = @counter);

    SET @tempCat = (SELECT [Description] FROM [Categories] WHERE [ID] = @tempID);
    print @tempCat;

    SET @tempCatString = @tempCatString + '<br/>' + @tempCat;
    SET @counter = @counter + 1;

END

عند تشغيل البرنامج النصي، والمخرجات @tempCatString لاغيا في حين دائما إخراج @tempCat بشكل صحيح. هل هناك سبب أن سلسلة لن تعمل داخل حلقة في حين؟ ويبدو خاطئا، لأن تزايد @counter يعمل تماما. حتى لا يكون هناك شيء آخر أنا في عداد المفقودين؟

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

المحلول

ويبدو أنه يجب أن تعمل ولكن لsomereason يبدو أن نفكرtempCatString باطل وهذا هو السبب كنت دائما الحصول على قيمة فارغة كما nullconcatenated إلى أي شيء آخر لا تزال فارغة. أقترح عليك أن تحاول مع COALESCE() على كل من المتغيرات لمجموعة منهم إلى "" إذا كانت فارغة.

نصائح أخرى

وهذا من شأنه أن يكون أكثر فعالية ....

select @tempCatString = @tempCatString + Coalesce(Description,'') + '<br/>' from Categories...

select @fn

وننظر أيضا في concat_null_yields_null كخيار لحل القضية سلسلة، على الرغم من وأود أن تجنب هذا الطريق

وأنا أتفق مع keithwarren، ولكن سأكون دائما المؤكد أن إضافة جملة ORDER BY إلى الاستعلام. يمكنك أن تكون على يقين من ذلك فيما يتعلق بالضبط ما تأمر يتم متصلا القيم في.

وكما أن تلتحم لاستبدال قيمة NULL مع '' سوف تسفر فعال الصفوف الفارغة. أنا لا أعرف إذا كنت تريد لهم أم لا، ولكن إن لم يكن عليك تصفية في جملة WHERE بدلا من ذلك ...

وأخيرا، يبدو انك لديك جدول مؤقت بما في ذلك معرفات كنت مهتما. يمكن أن يكون مجرد وشمل هذا الجدول في الانضمام لتصفية الجدول المصدر ...

DELCARE @output VARCHAR(8000)
SET @output = ''

SELECT
    @output = @output + [Categories].Description + '<br/>'
FROM
    Categories
INNER JOIN
    #vals
        ON #vals.val = [Categories].ID
WHERE
   [Categories].Description IS NOT NULL
ORDER BY
   [Categories].Description
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top