2015-09-09 71 views
0

我有這個存儲過程:如何在INSERT語句中使用(可能)臨時表而不是所有這些SELECT語句?

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 

如何修改它,所以我沒有做所有這些select語句...這是可怕的表現讓沿太可怕了設計。我假設我可以使用一個臨時表,但我想看看它爲我說明了在哪裏以及如何在存儲過程中執行此操作。謝謝。

回答

4

試試這個:

INSERT INTO [dbo].[MyTable] 
    ([Id] 
    ,[Column2] 
    ,[AnotherColumn]) 
SELECT Id, Column2, AgreementTypeId 
FROM [dbo].[MyTable] WHERE Id = @RequestId 
+0

被values關鍵字的要求? – JzInqXc9Dg

+0

@Bubbas當您從語句中給出的值中插入一行時,需要使用值關鍵字,這些值可以直接在sql子句中或變量中使用,但使用select子句可以替代它。您可以從文檔中找到不同的選項:https://msdn.microsoft.com/en-us/library/ms174335.aspx#OtherTables –

+0

因此,如果我確實需要從參數中插入一個值並保留之前的值記錄我可以用SELECT來完成。 SELECT Id,Column2,@AgreementTypeId – JzInqXc9Dg

0

你不能說喜歡

SELECT Id,Column2,AgreementTypeId 
FROM [dbo].[MyTable] WHERE Id = @RequestId 
相關問題