sql-server - 操作存储过程中的数据列表以在另一个存储过程中使用
问题描述
目前我正在使用 SQL Server 中的 T-SQL 编写存储过程。我的脚本包含运行另一个存储过程以从表中获取数据列表的代码。我想操作数据,使用数据列表从存储过程中修改它们以用于另一个目的(例如总结一列并添加更多数据列表)。我知道的一种方法是创建一个临时表。但在那之后,我不太确定。请帮忙。谢谢。
这是我的代码:
ALTER PROCEDURE [dbo].[AJU_Rpt_ARAgingSp]
(@Slsman_Starting slsmantype = NULL,
@Slsman_Ending slsmantype = NULL,
@Custnum_Starting custnumtype = NULL,
@Custnum_Ending custnumtype = NULL,
@CustType endusertypetype = NULL,
@CutOff_Date datetype = NULL,
@SumToCorp ListYesNoType = NULL, -- >> 0 = individual, 1 = corp customer
@ShowActive ListYesNoType = NULL, -- >> 0 = all trx, 1 = active only
@TransDomCurr ListYesNoType = NULL, -- >> 0 = dont convert, 1 = convert to local currency
@AgingBasis ArAgeByType = NULL, -->> i = invoice date, d = due date
@LeftToRight ListYesNoType = NULL, -- >> 0 = right to left, 1 = left to right
@CurrSite NVARCHAR(8),
@ShowDetailInfo NVARCHAR(1) = NULL)
AS
BEGIN
SET NOCOUNT ON
IF ISNULL(@CurrSite ,'') = ''
SET @CurrSite = (SELECT TOP 1 site_ref FROM parms_mst)
DECLARE @v_StartDate DateType
SET @Slsman_Starting = ISNULL(@Slsman_Starting, dbo.LowCharacter())
SET @Slsman_Ending = ISNULL(@Slsman_Ending, dbo.HighCharacter())
SET @Custnum_Starting = ISNULL(@Custnum_Starting, dbo.LowCharacter())
SET @Custnum_Ending = ISNULL(@Custnum_Ending, dbo.HighCharacter())
SET @v_StartDate = dbo.LowDate()
SET @CutOff_Date = GETDATE()
EXEC dbo.ApplyDateOffsetSp @v_StartDate OUT, NULL, 0
EXEC AJU_Rpt_DebtorSp
@CustNumStart = @Custnum_Starting
,@CustNumEnd = @Custnum_Ending
,@DistDateStart = @v_StartDate
,@DistDateEnd = @CutOff_Date
,@CurrCodeStart = NULL
,@CurrCodeEnd = NULL
,@SlsmanStart = @Slsman_Starting
,@SlsmanEnd = @Slsman_Ending
,@TerritoryStart = NULL
,@TerritoryEnd = NULL
,@CustTypeStart = NULL
,@CustTypeEnd = NULL
,@SiteGroup = @CurrSite
,@ConsolidatePayment = NULL
,@DisplayResult = 1
END
解决方案
由于临时需要初始结果表,您可以执行以下操作:
- 在调用过程中,创建一个与被调用过程返回的结构相同的表变量,
在调用过程中编写如下语句:
INSERT INTO @_Tempo_Table EXEC Invoked_Procedure (<params>) ;
在调用的过程中发出 a
SELECT
将返回记录集。
另一方面,如果您需要将初始表传递给调用的过程:
- 创建一个结构与需要共享的表相同的类型,
- 将您刚刚创建的类型的参数添加到调用的过程中(必须声明为
READONLY
), - 在调用过程中获得包含数据的表后,调用被调用的过程,将表变量作为参数传递。
这种方法将呈现最佳性能(这里我假设您没有传递包含数百万条记录的表;如果这样做,尽管您可能需要大量内存,但它仍然是最快的方法)。
推荐阅读
- sql - SQL 将数据库和数据复制到开发机器上
- python - str 类型 Python 2 中的 UTF-8 编码
- android - 如何从触发填充请求的位置获取客户端应用程序的包名称
- scala - 使用 Intellij IDE 运行 Scala Dotty 项目
- java - 如何解决 java.sql.SQLRecoverableException:IO 错误:连接超时
- java - 如何在 Apache POI 数据透视表报表过滤器中设置多个默认值
- python - Kivy - 类的第一个小部件没有颜色
- dropwizard - 在 Dropwizard 应用程序中使用 Metrics 测量活动 (HTTP) 连接的总数
- scala - 在比较两个异常对象时,ShouldBe 和 ShouldEqual 哪个更好
- jquery - 为什么“&”有时会出现在网站上?