Вызов хранимой процедуры из INSERT INTO - PullRequest
3 голосов
/ 20 января 2011

Итак, у меня есть эта хранимая процедура, которая принимает параметр DATETIME, date.Он вставляет это значение в другую таблицу и возвращает этот идентификатор.

Позволяет вызвать эту хранимую процедуру getTimeID.Где DimTime - это таблица, в которую он вставляет параметр DATETIME.

Поэтому я хочу скопировать в идентификатор TableB ID и TimeID, а не ID и дату.*

Но я не могу заставить работать синтаксис EXEC.

Пожалуйста, помогите.

Ответы [ 2 ]

6 голосов
/ 20 января 2011

Синтаксис для вставки из хранимой процедуры:

INSERT INTO TheTable (col1, col2) EXEC TheStoredProcedure

Это очень негибко: таблица должна соответствовать точному расположению столбца хранимой процедуры.

Одно из возможных решенийхранить результат из хранимой процедуры в табличной переменной.Например:

declare @id int
select  @id = ID 
from    [TableB].dbo.Main

declare @t table (TimeID int)
insert @t (TimeID) exec getTimeID '2011-01-20'

declare @TimeID int
select  @TimeID = TimeID 
from    @t

insert [TableA].dbo.Main values (@ID, @TimeID) 
0 голосов
/ 11 сентября 2011

Если вы хотите вкладывать вызовы хранимых процедур или использовать динамический SQL, то в итоге вы будете использовать временные таблицы вместо табличных переменных.Вам все еще нужно будет определить таблицу заранее, но вы заполните ее следующим образом:

INSERT INTO #t EXEC sp_executesql @cmd

Другие процессы, которые Andomar предлагает для вашего конкретного сценария, будут работать хорошо.

Если у вас есть возможность, я бы преобразовал эту хранимую процедуру в функцию, а затем просто использовал бы:

INSERT INTO [TableA].dbo.Main (ID, timeID) 
SELECT ID,
       dbo.getTimeID(date)
FROM [TableB].dbo.Main
...