Как можно объединить возвращенные строки, чтобы получить одну таблицу, а не несколько окон? - PullRequest
0 голосов
/ 18 июня 2019

Этот код возвращает строку, содержащую адрес для каждого из последних 8 кварталов. Строки отображаются в отдельных окнах в результатах, но я хочу объединить результаты.

Я пытался добавить 'Merge' в качестве строки в конец динамического SQL, но это не работает.

UNION ALL - это то, к чему я хотел бы обратиться, но когда я попробую его, я получу следующую ошибку: Msg 102, Уровень 15, Состояние 1, Строка 9 Неверный синтаксис рядом с 'ALL'.

- ниже код, который я использую

ALTER PROCEDURE [dbo].[USP_History_Building] 

        @BUILDING int

AS 

DECLARE @quarterStart int = 2
DECLARE @quarterEnd int = 1
DECLARE @yearStart int = 17
DECLARE @yearEnd int = 19
DECLARE @BUILDING_ID int
DECLARE @year int
DECLARE @quarter int

DECLARE @quarterForDbName nvarchar(4)
DECLARE @sqlStatement nvarchar(max)

SET @year = @yearStart
SET @quarter = @quarterStart
SET @sqlStatement = ''

SET  @BUILDING_ID = @BUILDING


WHILE @year <= @yearEnd
BEGIN
    WHILE ((@year < @yearEnd AND @quarter <= 4) OR (@year = 
           @yearEnd AND @quarter <= @quarterEnd))
    BEGIN
    SET @quarterForDbName = 'Q' + CAST(@quarter AS nvarchar(1)) + 
            CAST(@year AS nvarchar(2))


       SET @sqlStatement = @sqlStatement + 
       'SELECT '''  + @quarterForDbName +  ''' AS Quarter, 
       ADDRESS_POINT_ID, BUILDING_ID, ADDR_LINE_1, ADDR_LINE_2, 
       ADDR_LINE_3, ADDR_LINE_4, ADDR_LINE_5, ADDR_LINE_6, ADDR_LINE_7, 
       ADDR_LINE_8 FROM EDB_'+ @quarterForDbName +'.dbo.POSTAL_ADDRESS PA 
       WHERE PA.BUILDING_ID = ' + CAST(@BUILDING_ID AS VARCHAR)

        SET @quarter = @quarter + 1  

    END
    SET @quarter = 1
    SET @year = @year + 1


END

PRINT @sqlStatement
EXEC (@sqlStatem

Ожидаемый результат - это одно окно результатов, содержащее 8 четвертей адресных записей, которые можно легко скопировать и вставить в Excel или в другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...