一時ビューを作成し、この一時ビューに基づいて複数の更新を実行するストアドプロシージャを作成しています。 問題は、この一時ビューが最初のUPDATEコマンドの後で有効でないことです(エラーは「無効なオブジェクト名」です)。ストアドプロシージャの一時ビューは最初の更新時にのみ有効です
USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_MySP]
@passedParam VARCHAR(32)
AS
BEGIN
WITH MyTempView AS
(
SELECT [myTable1].[Id]
FROM [dbo].[myTable1] LEFT JOIN [dbo].[myTable2] ON [myTable1].Id = [myTable2].[DeviceId]
WHERE
--all kind of conditions
)
--The temp view is valid here
UPDATE [dbo].[myTable1]
SET [myTable1].[Ready] = 0, [myTable1].[Reason] = NULL
WHERE
[myTable1].[Id] IN (SELECT [Id] FROM MyTempView)
--The temp view is NO LONGER VALID from this point
UPDATE [dbo].[myTable1]
SET [myTable1].[Reason] = CONCAT([myTable1].[Reason],'Reason 1.')
WHERE
--all kind of conditions
UPDATE [dbo].[myTable1]
SET [myTable1].[Reason] = CONCAT([myTable1].[Reason],'Reason 2.')
WHERE
--all kind of conditions
UPDATE [dbo].[myTable1]
SET [myTable1].[Reason] = CONCAT([myTable1].[Reason],'Reason 3.')
WHERE
--all kind of conditions
UPDATE [dbo].[myTable1]
SET [myTable1].[Reason] = CONCAT([myTable1].[Reason],'Reason 4.')
WHERE
--all kind of conditions
END
どのように解決できますか? ありがとうございます。
CTEは「一時ビュー」ではありません。 _ "一時テーブルを作成する" _ - あなたのspに一時テーブル作成コードはありません。 –