Когда я выполняю хранимую процедуру, я получаю следующее сообщение об ошибке.
Сообщение 245, Уровень 16, Состояние 1, Процедура USP_History_Building, Строка 35 [Стартовая Строка 8]
Ошибка преобразования при преобразовании значения nvarchar 'SELECT * FROM EDB_Q217.dbo.POSTAL_ADDRESS PA WHERE PA.BUILDING_ID =' в тип данных int.
Я пробовал небольшие изменения в коде, но ни одна из них не работает.
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 * FROM EDB_'+ @quarterForDbName +'.dbo.POSTAL_ADDRESS PA
WHERE PA.BUILDING_ID = ' + @BUILDING_ID
SET @quarter = @quarter + 1
END
SET @quarter = 1
SET @year = @year + 1
END
PRINT @sqlStatement
EXEC (@sqlStatement)
Ожидаемый результат заключается в том, что за предыдущие 8 кварталов возвращается несколько полей адреса.