从INSERT INTO中调用存储过程

时间:2011-01-20 15:20:29

标签: sql-server sql-server-2008 stored-procedures insert

所以我有这个存储过程接受DATETIME参数date。它将该值插入另一个表并返回该ID。

让我们调用这个存储过程getTimeID。其中DimTime是表格,它将DATETIME参数插入。

所以我想复制到TableB ID和TimeID,而不是ID和日期。

我正在尝试:

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

但我无法在EXEC上使用语法。

请帮忙。

2 个答案:

答案 0 :(得分:6)

从存储过程插入的语法是:

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) 

答案 1 :(得分:0)

如果您想要嵌套存储过程调用或使用动态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