代码之家  ›  专栏  ›  技术社区  ›  default_noob_network

如何在INSERT语句中使用(可能)临时表而不是所有这些SELECT语句?

  •  0
  • default_noob_network  · 技术社区  · 10 年前

    我有以下存储过程:

    CREATE PROCEDURE [dbo].[InsertStuff]
        @RequestId int
    AS
    BEGIN
        SET NOCOUNT ON
    
        INSERT INTO [dbo].[MyTable] ([Id], [Column2], [AnotherColumn])
        VALUES
            ((SELECT Id FROM [dbo].[MyTable] WHERE Id = @RequestId)
            ,(SELECT Column2 FROM [dbo].[MyTable] WHERE Id = @RequestId)
            ,(SELECT AgreementTypeId FROM [dbo].[MyTable] WHERE Id = @RequestId))
    END
    

    我怎么能修改它,这样我就不会做所有这些选择语句了……这对性能来说很糟糕,更不用说糟糕的设计了。我假设我可以使用临时表,但我希望看到它为我详细说明在存储过程中的位置和方式。谢谢

    2 回复  |  直到 10 年前
        1
  •  4
  •   James Z    10 年前

    试试看:

    INSERT INTO [dbo].[MyTable]
        ([Id]
        ,[Column2]
        ,[AnotherColumn])
    SELECT Id, Column2, AgreementTypeId 
    FROM [dbo].[MyTable] WHERE Id = @RequestId
    
        2
  •  0
  •   Rahul    10 年前

    你不能这样说吗

    SELECT Id,Column2,AgreementTypeId  
    FROM [dbo].[MyTable] WHERE Id = @RequestId