Хранимая процедура не дает результатов, усечение работает, но ничего не вставляет - PullRequest
0 голосов
/ 02 июля 2019

Занятое написание моей первой хранимой процедуры на SQL, я столкнулся с проблемой, которую не могу решить сам.

Хранимая процедура должна усекать таблицу и вставлять в нее новые значения.Усечение идет хорошо, но вставки нет.Когда я запускаю запрос вне процедуры, он возвращает ожидаемые результаты.

Я запускаю процедуру вручную.

  • Типы данных в процедуре соответствуют типам данных в целевой таблице

  • Запускзапрос вне процедуры возвращает ожидаемые результаты

Этот код:

Create Procedure Usp_Max_DateUpdated( 
        @TableName nvarchar (50)    
    ,   @Max_DateUpdated numeric(6,0)   
)
as
Begin

set nocount on;

truncate table Max_UPMJ;


With CTE_Fact_Account_Ledger as(
select 
cast(isnull(max([DateUpdated (GLUPMJ)]),0) as numeric(6,0)) as Max_DateUpdated,
'Fact_Account_Ledger' as TableName 
from DWH_Backroom.dbo.Fact_Account_Ledger
)

, CTE_Dim_Company as(
select 
cast(isnull(max([DateUpdated (CCUPMJ)]) ,0) as numeric(6,0)) as Max_DateUpdated, 
'Dim_Company' as TableName
from DWH_Backroom.dbo.Dim_Company
)

insert into Max_UPMJ (DateUpdated, TableName)
select 
Max_DateUpdated,
TableName 
From CTE_Fact_Account_Ledger CFAL
where Max_DateUpdated = @Max_DateUpdated and TableName = @TableName

union 

select 
Max_DateUpdated,
TableName
From CTE_Dim_Company
where Max_DateUpdated = @Max_DateUpdated and TableName = @TableName

End

Ожидаемый результат: (из запроса)

  • Дата обновления 119183, имя таблицы Fact_Account_Ledger

  • Дата обновления 0, имя таблицы Dim_Company

Результат из процедуры без строк

** Результат из запроса * 2 затронутых строки

Редактировать: сообщений об ошибках нет, и возвращаемое значение равно 0

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Сам нашел решение:

1) Поместив (@TableName nvarchar (50), @Max_DateUpdated numeric(6,0)) непосредственно после create procedure, который я вызвал для переменных, которые не существуют;

2) Казалось, что в этой процедуре не требуется никаких параметров или переменных.

Работает следующий код:

Create Procedure Usp_Max_DateUpdated

as
Begin

set nocount on;

truncate table Max_UPMJ;

With CTE_Fact_Account_Ledger as(
select 
        cast(isnull(max([DateUpdated (GLUPMJ)]),0) as numeric(6,0)) as Max_DateUpdated
    ,   'Fact_Account_Ledger' as TableName 
from DWH_Backroom.dbo.Fact_Account_Ledger
)

, CTE_Dim_Company as(
select 
        cast(isnull(max([DateUpdated (CCUPMJ)]) ,0) as numeric(6,0)) as Max_DateUpdated
    ,   'Dim_Company' as TableName
from DWH_Backroom.dbo.Dim_Company
)

insert into Max_UPMJ (DateUpdated, TableName)

select 
        Max_DateUpdated
    ,   TableName 
From CTE_Fact_Account_Ledger CFAL

union 

select 
        Max_DateUpdated
    ,   TableName
From CTE_Dim_Company
;
End
0 голосов
/ 02 июля 2019

Ваша хранимая процедура вставляет строки в Max_UPMJ. Но не выбирайте эту строку. Если вы хотите увидеть эти строки, вы должны добавить код select * from Max_UPMJ

...