所以我有这个存储过程接受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上使用语法。
请帮忙。
答案 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