C# 使用存储过程作为函数

C# 使用存储过程作为函数,c#,sql,stored-procedures,C#,Sql,Stored Procedures,我需要将存储过程结果存储在临时表中。但存储过程结果可以是任何列中的任何表 是否有一个通用表(没有指定列),我们可以将任何表插入其中? 我知道我可以使用函数,但是否可以使用存储过程 代码如下: begin transaction create table temp_table as exec my_store_proc 1,111 select * from temp_table drop table temp_table commit transaction 在上面的代码中,my\u

我需要将存储过程结果存储在临时表中。但存储过程结果可以是任何列中的任何表

是否有一个通用表(没有指定列),我们可以将任何表插入其中? 我知道我可以使用函数,但是否可以使用存储过程

代码如下:

begin transaction

create table temp_table as

exec my_store_proc 1,111

select * from temp_table

drop table temp_table

commit transaction

在上面的代码中,
my\u store\u proc
结果是一个包含6列的表(例如)

最好使用函数,因为使用proceure是不可能的。创建具有返回类型表的函数,并使用它可以正常工作

您可以这样做,但列序列不受控制

--INSERT...EXECUTE procedure example
 INSERT @temptable EXECUTE proceudrename

你可以使用这样的方法

declare @t table(ID int, Name nvarchar(max), AnotherId int)

insert @t
exec theStoredProc

-- then you can utilize the result in a join

select * from SomeTable inner join @t as t on SomeTable.ID =  t.ID.... 
试试这个

开始交易

创建表格@tmp ( 您的字段在my_store_proc过程中定义 )

插入@tmp 执行我的存储过程1111

从@tmp中选择*


提交事务

如果您也解释了为什么要这样做,您可能会得到更好的建议。我有一个生成程序报告的存储过程。现在我想在另一个连接查询中使用这个结果,但不想复制函数中的代码,也不想更改基代码(storeproc)。如果可能,最好将代码移动到函数中。然后更改预先存在的存储过程以调用该函数(作为简单的API样式包装),以保持向后兼容性。不,这是不可能的!因为我们的读卡器(硬件)使用这个存储过程。因此,对它的任何更改都应该得到另一个程序员的许可(他非常努力地更改代码)。我们更愿意把它当作最后的办法。感谢您喜欢教条式地坚持那些限制开发、增加复杂性和降低可维护性的方法。你可能还有其他原因,但你在征求建议,建议是你想要的方法会导致更多的问题和错误,而不是更少?我不想在declarationOK中指定列,我知道,但我的问题有点不同:“使用未指定的列”。感谢您的关注这个问题有一个很好的讨论:如何从[Storage procedure]中选择*进入[temp table]“注意:指定列是很困难的。除非存储过程根据输入返回不同的结果,否则结果集不总是具有相同的形状吗?