我需要将存储过程的结果集存储在临时表中(使用 SQL Server 2000)。从我读过的内容来看,这个(结构不佳的例子)应该可以工作:
create table #tempTable (TempId int primary key, Column1 varchar(100),
Column2 varchar(100), DateCreated datetime)
insert into #tempTable (TempId, Column1, Column2, DateCreated)
exec sproc_Select_Stuff_By_DateCreated @Date1 = '1/1/2009', @Date2 = '1/2/2009'
但我得到:“插入错误:列名或提供的值的数量与表定义不匹配。”
检查过程(我无法编辑)揭示了这一点:
CREATE PROCEDURE sproc_Select_Stuff_By_DateCreated
@Date1 datetime,
@Date2 datetime
AS
BEGIN
SELECT TempId, Column1, Column2, DateCreated
FROM ReallyHugeMessOfJoinsAndCalculatedColumns
WHERE DateCreated between @Date1 and @Date2
SELECT @Date1 as Date1, @Date2 as Date2
END
所以它实际上是在回显作为第二个结果集传递给它的参数。(我不知道为什么;我想任何调用该过程的东西都会知道它传入了什么数据。)
我的测试使我认为第二个结果集是导致插入失败的原因 - 就像 SQL 试图将结果集合并在一起并失败。
我只需要将第一个结果集保存到我的临时表中。我怎样才能做到这一点?
编辑
感谢您指出 CLR 存储过程,但该功能是在 SQL 2005 中引入的 - 它不适用于 2000。(但我以前不知道它们,它们看起来在我们升级时会很有用。)
由于唯一的其他答案看起来是“你不能” - 我想这对我来说又回到了绘图板上。