#sql-server #tsql #dynamic-sql #azure-sql-data-warehouse
#sql-server #tsql #динамический-sql #azure-sql-data-warehouse
Вопрос:
Во-первых, у меня нет никакого опыта работы с динамическим SQL, это моя первая попытка. я просматривал ответы здесь, но различные попытки исправить это не увенчались успехом, что привело меня в замешательство.
Я создал таблицу с циклическими месяцами [#Месяц], а также создал таблицу кодов транзакций [#Tran_codes], мне нужно объединить их с транзакционными данными, но я получаю недопустимое имя объекта ‘#Trans1’. я знаю, что это связано с тем, что временная таблица выходит за рамки, но я не знаю, как это исправить.
Это код, который вызывает у меня проблемы, пожалуйста, вы можете помочь исправить или посоветовать, где я могу прочитать о правильном синтаксисе для использования?
-------------------------------------------------------------------
PRINT '03. Create a Table with all Tran codes as per "02", with transaction amounts, per month-end date for past 25 months as set out by "01" '
-------------------------------------------------------------------
DECLARE
@i INT
,@j INT
,@Monthend_Date varchar(50)
,@Month_String VARCHAR(6)
,@SQL VARCHAR(MAX)
SET @i = 1
SET @j = (SELECT MAX(RowNum) FROM #Month)
WHILE @i <= @j
BEGIN
SET @Month_String = (SELECT MonthString FROM #Month WHERE RowNum = @i)
IF @i = 1
BEGIN
----------------------------------------------------------
SET @SQL = '
IF OBJECT_ID(''tempdb..#Trans1'') IS NOT NULL DROP TABLE #Trans
CREATE TABLE #Trans1
WITH
(
DISTRIBUTION = HASH(Tran_Date_Key)
,LOCATION = USER_DB
)
AS
SELECT
Monthend_Date = ''' CONVERT(Varchar(30), @Monthend_Date) '''
,Trans.Tran_Code_Key
,TD.Tran_Code
,TD.Description
,Amount
FROM DATASTORE_MIS.[dbo].vwF_Transaction_' @Month_String ' Trans
inner join DATASTORE_MIS.[dbo].vwF_Transaction_Description_' @Month_String ' as TD on Trans.Journal_No = TD.Journal_No
AND Trans.[Tran_Date_Key] = TD.[Tran_Date_Key]
'
EXEC (@SQL)
End
ELSE
BEGIN
SET @SQL = '
INSERT INTO #Trans1
SELECT
Monthend_Date = ''' CONVERT(Varchar(30), @Monthend_Date) '''
,Trans.Tran_Code_Key
,TD.Tran_Code
,TD.Description
,Amount
FROM DATASTORE_MIS.[dbo].vwF_Transaction_' @Month_String ' Trans
inner join DATASTORE_MIS.[dbo].vwF_Transaction_Description_' @Month_String ' as TD on Trans.Journal_No = TD.Journal_No
AND Trans.[Tran_Date_Key] = TD.[Tran_Date_Key]
'
EXEC (@SQL)
END
SET @i = @i 1
END
Комментарии:
1. Создайте временную таблицу с необходимой схемой перед выполнением динамического SQL и загрузите ее с помощью
INSERT...SELECT
инструкции dynamic SQL. После этого таблица будет доступна как во внешней, так и во внутренней области (динамические операторы SQL).2. Добавлен
azure-sql-data-warehouse
тег к вашему вопросу на основе используемого вами синтаксиса.