If you make the DELETE
dynamic, your stored procedure will successfully ALTER
the table, DELETE
the records in question, and then ALTER
it back.
CREATE PROCEDURE [dbo].[OrderHistoryDelete]
(@Id UNIQUEIDENTIFIER)
AS
BEGIN
DECLARE @sql VARCHAR(MAX)
BEGIN TRANSACTION
ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = OFF )
SET @sql="DELETE FROM [dbo].[OrderHistory] WITH (TABLOCKX)
WHERE [Id] = "'' + CAST(@Id AS VARCHAR(40)) + ''''
EXEC (@sql)
ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[OrderHistory]))
COMMIT TRANSACTION
END