Включите запросы INSERT и UPDATE в одну хранимую процедуру SQL Server - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь выполнить INSERT и UPDATE в одной хранимой процедуре в SQL Server 2008. Когда я выполняю запрос UPDATE и запрос INSERT по отдельности, они работают нормально.Однако, когда я пытаюсь включить их в одну хранимую процедуру, я получаю синтаксическую ошибку.

Это моя хранимая процедура:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF object_ID(N'[dbo].[usp_AtRiskAsset_SFLoadStaging]') IS NOT NULL
      DROP PROCEDURE [dbo ].[usp_AtRiskAsset_SFLoadStaging]
GO

CREATE PROCEDURE [dbo].[usp_AtRiskAsset_SFLoadStaging]
AS
BEGIN
    INSERT INTO dbo.ARA_Stage (Id, [CanceledRevenue], [YearToDateRevenue], [PriorYearRevenue])
        SELECT
            ARA.[Id],
            'NULL',
            'NULL',
            'NULL'
        FROM 
            dbo.ARA ARA
        INNER JOIN 
            dbo.Asset AST ON AST.[Id] = ARA.Asset__c
        INNER JOIN 
            dbo.[Case] CS ON CS.[Id] = ARA.Case__c
        WHERE 
            CS.IsClosed = 'false' 
            AND CS.Record_Type_Name__c = 'At Risk'
            AND AST.IsActive__c = 'true'

    UPDATE dbo.ARA_Stage
        SELECT 
            ARS.Id,
            ARW.CanceledRevenue,
            ARW.YearToDateRevenue,  
            ARW.PriorYearRevenue
        FROM 
            dbo.ARA_Working ARW
        INNER JOIN 
            dbo.Account AC ON ARW.AccountNumber =  AC.Contract_Number__c
        INNER JOIN 
            dbo.Asset AST ON ARW.PDCT01_ID = AST.PDCT01_Id__c
                          AND AST.AccountId = AC.Id
        INNER JOIN 
            dbo.ARA ARS ON AST.Id = ARS.Asset__C
        INNER JOIN 
            dbo.Product2 PRD ON ARW.PDCT01_ID = PRD.PDCT01_Id__c
                             AND AST.PDCT01_Id__c = ARW.PDCT01_ID
        INNER JOIN 
            [dbo].[Case] CS ON ARS.Case__c = CS.Id
        WHERE  
            CS.Account_Contract_Number__c = ARW.AccountNumber
            AND CS.Record_Type_Name__c = 'At Risk'
            AND CS.IsClosed = 'false'
END
GO

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

Сообщение 156, уровень 15, состояние 1, процедура usp_AtRiskAsset_SFLoadStaging, строка 46
Неверный синтаксис рядомключевое слово «SELECT».

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 16 декабря 2018

Вам нужно сопоставить столбцы с выбранным в обновлении по set ключевому слову

Например

UPDATE dbo.ARA_Stage
SET [CanceledRevenue] = ARW.CanceledRevenue
...
...