2015-09-09 1 views
0

У меня есть эта хранимая процедура:Как использовать (возможно) временную таблицу вместо всех этих операторов SELECT внутри моего оператора INSERT?

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 

Как я могу изменить его так, что я не делаю все эти заявления выберите ... что ужасно для исполнения пусть вдоль всего ужасный дизайн. Я предполагаю, что могу использовать временную таблицу, но я хотел бы, чтобы она разъяснила мне, где и как я буду делать это в хранимой процедуре. Благодарю.

ответ

4

Попробуйте это:

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

является то значения ключевых слов требуется? – JzInqXc9Dg

+0

@Bubbas Values ​​ключевое слово необходимо, когда вы вставляете строку из значений, указанных в инструкции, с любыми значениями непосредственно в выражении sql или переменными, но использование этого предложения является альтернативой этому. Вы можете найти различные варианты из документации: 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 

 Смежные вопросы

  • Нет связанных вопросов^_^