У меня есть процедура, в которой выполняются вычисления, и окончательный результат вставляется в постоянную таблицу. Я хочу удалить постоянную таблицу и не могу также использовать временную таблицу. Поэтому я хочу использовать динамическое имя таблицы, которое хранится в переменной:
Текущий сценарий:
Insert into xyz_table
Select col1,col2,sum(col3)
from BaseTable
(На самом деле столбцов много и много вычислений)
Что я хочу:
Select col1,col2,sum(col3) into @DynamicTableName
from BaseTable
где имя таблицы будет динамическим по своей природе, т.е.
@DynamicTableName = 'xyz ' + cast(convert(date,getdate()) as nvarchar)+' '+convert(nvarchar(5),getdate(),108)
Оно будет содержать дату и время в своем имени при каждом запуске процедуры.
Я хочу использовать это имя в «Выбрать * в утверждение»
Как мне этого добиться?
Я попробовал это с небольшим кодом. Но поскольку в моей процедуре много вычислений и UNIONS, я не могу использовать этот код для этого. Любая помощь будет оценена.
declare @tablename nvarchar(30)= 'xyz ' + cast(convert(date,getdate()) as nvarchar)+' '+convert(nvarchar(5),getdate(),108)
declare @SQL_Statement nvarchar(100)
declare @SQL_Statement2 nvarchar(100)
declare @dropstatement nvarchar(100)
SET @SQL_Statement = N'SELECT * Into ' +'['+@tablename +'] '+'FROM '+ 'dimBranch'
print @SQL_Statement
EXECUTE sp_executesql @SQL_Statement
SET @SQL_Statement= N'select * from ' + '['+@tablename + '] '
print @SQL_Statement
EXECUTE sp_executesql @SQL_Statement
set @dropstatement = 'DROP TABLE' + '['+@tablename + '] '
PRINT @dropstatement
exec sp_executesql @dropstatement
Причина, по которой я этого хочу, заключается в том, что я использую эту процедуру в задании ETL, а также в отчете SSRS. И если кто-то запускает пакет и отчет SSRS одновременно, неверные или странные данные сохраняются в таблице. Поэтому мне нужно динамическое имя таблицы с датой и временем.