Службы Reporting Services - длина строки изменяется с помощью UNION ALL T-SQL - PullRequest
0 голосов
/ 06 января 2012

У меня есть один data_source, возвращающий 2 строки из запроса с одной строкой с 8 символами и другой с 11 символами.Я действительно уверен, что одна из строк имеет 8 символов, потому что я явно поместил ее в условие where (что-то вроде этого. Где name = 'ftcc_ppp'). Правда в том, что службы отчетов добавляют некоторые дополнительные пустые символы и исправляютдлина строки до максимума (длина строки всего набора результатов без условия where).

Я хотел сделать несколько фильтров и получал неправильные результаты, потому что строка была не с 8 символами, а вместо этогос 11 символами (8 + 3 пробела).

Условие where выполняется в подзапросе, который содержит в этом поле одну строку с 8 символами, а другую с 11 символами (ftcc_ppp и ftcc_ppp_lx).

Почему службы отчетности действуют так?Любое объяснение?

Спасибо всем

РЕДАКТИРОВАТЬ: Код запроса:

BEGIN

DECLARE @dtDate DATETIME
DECLARE @lastDay DATE;
DECLARE @firstDay DATE;
DECLARE @currentDate DATE;
DECLARE @month_table AS TABLE(DATA DATE);

SET @dtDate     =  @DATA;
SET @lastDay    =  CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dtDate)+1,0))  AS DATE)
SET @firstDay   =  DATEADD(d,-DAY(@dtDate)+1,@dtDate);
SET @currentDate = @firstDay;

WHILE @currentDate <> dateadd(d,1,@lastDay)
BEGIN
        PRINT @currentDate;
        INSERT INTO @month_table VALUES(@currentDate);
        SET @currentDate = dateadd(d,1,@currentDate);
END

         SELECT * FROM (

        SELECT DATA,motivo,SUM(total) AS total,CAST(campanha AS VARCHAR(11)) AS campanha,[TYPE]
        FROM [Client].[dbo].[ftcc_ppp_motivo_nelegivel_totais]
        GROUP BY DATA,motivo,campanha,[TYPE]   

        UNION ALL      

        SELECT DATA,motivo,0 AS total,CAST('ftcc_ppp' AS VARCHAR(11)) campanha,'LOP' AS [TYPE]
        FROM @month_table
        CROSS JOIN dbo.ftcc_ppp_motivo_nelegivel_keys

        UNION ALL
        SELECT DATA,motivo,0 AS total,CAST('ftcc_ppp' AS  VARCHAR(11)) campanha,'ALOP' AS [TYPE]
        FROM @month_table
        CROSS JOIN dbo.ftcc_ppp_motivo_nelegivel_keys

        UNION ALL
        SELECT DATA,motivo,0 AS total,CAST('ftcc_ppp_lx' AS VARCHAR(11)) campanha,'CARD' AS [TYPE]
        FROM @month_table
        CROSS JOIN dbo.ftcc_ppp_motivo_nelegivel_keys
    ) xpto
        WHERE campanha = 'ftcc_ppp'


END

Ответы [ 2 ]

0 голосов
/ 06 января 2012

Другая возможная причина: проверьте уровень совместимости вашей базы данных.Если установлено значение 80, у вас может быть проблема, но 90 (или выше?) У вас не возникнет.

Согласно: http://msdn.microsoft.com/en-us/library/bb510680.aspx

СОЮЗ переменной длиныстолбец и столбец фиксированной длины создает столбец фиксированной длины.

0 голосов
/ 06 января 2012

Я нашел проблему !!:) :)

Проблема была в жестко закодированной строке.По-видимому, жестко закодированные строки - это тип char.Таким образом, у меня был один символ с 8 плюс один символ с 11.

Очевидным результатом было 11 символов.

Используя len () в SQL SERVER, я не смог найти вставленные пробелы, потому что SQLSERVER автоматически удаляет пустые символы.При редактировании строк внутри SQL SERVER курсор показывал мне пробелы.Отличный урок:)

Спасибо всем за время, уделенное моей проблеме.

Было приятно впервые использовать StackOverflow.

Спасибо всем.Привет.

...