Sha*_*pta 2 c# sql database stored-procedures temp-tables
我使用存储过程超过1.5年.但我从未考虑过如何从UI或其他存储过程中检索数据.
当我写一个简单的存储过程.例如.
CREATE PROCEDURE sp_test
AS
BEGIN
 SELECT * FROM tblTest --Considering table has 3 columns.
END
C#如何将此结果导入DataTable.
每当我必须在另一个过程中使用此过程的结果时,我认为我们必须使用table数据类型创建一个表值参数,并将其结果分配给表变量.我从来没有尝试过.
CREATE PROCEDURE sp_testcall
AS
BEGIN
 @temp = exec sp_test -- I think this would be the way, never tried
END
如果上面的示例代码为true,那么使用上述方法和查询将记录插入临时表之间有什么区别?
CREATE PROCEDURE sp_test
AS
BEGIN
 SELECT * INTO #tmp FROM tblTest --Considering table has 3 columns.
END
似乎将结果复制到临时表需要sql server的另一项努力.但幕后会发生什么?它会直接将结果的引用分配给表值参数,还是使用与临时表相同的过程?
我的问题可能不太清楚.但我会尽力改进.
对于初级到中级,您应该始终考虑#temp表和@table变量两个相同硬币的面.虽然它们之间存在一些差异,但出于所有实际目的,它们的成本相同且行为几乎完全相同.唯一的主要区别是@table变量不会被事务处理,因此不会受到回滚的影响.
如果深入研究细节,#temp表的处理成本稍高(因为它们是交易的),但另一方面,@ table变量只有变量范围的生命周期.
至于你提出的其他问题:
INSERT INTO <table> EXEC sp_testErland Sommarskog详细分析了程序之间共享数据的主题,请参阅如何在存储过程之间共享数据.