/ *
Я передаю целое число в качестве параметра в хранимой процедуре SQL, но получаю сообщение об ошибке, несмотря на объявление входного значения.
Целью является использование значения, переданного параметру в динамическом SQL в цикле WHILE.
Этот метод отлично работает при передаче строковых значений через параметр в динамический SQL, но с целочисленными значениями возвращается сообщение об ошибке:
Сообщение 137, Уровень 15, Состояние 2, Строка 16
Необходимо объявить скалярную переменную "@BUILDING_ID"
Ниже приведен код, который я использую:
* /
CREATE OR 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 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 строк с 6 адресными полями за предыдущие 8 кварталов. /