Я пытаюсь выполнить 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».
Может кто-нибудь помочь?