SQL 将表作为参数传递?

Posted

技术标签:

【中文标题】SQL 将表作为参数传递?【英文标题】:SQL Passing tables as parameters? 【发布时间】:2016-04-13 22:47:01 【问题描述】:

我正在执行需要来自两个不同表的两列的乘法运算,然后在单独的查询中使用结果。我认为这是可能的观点:

SELECT SUM(A.salesAmt * B.sales%) AS rebateAmount

但是在这里可以使用表值函数,还是更合适?表 A 和表 B 是否可以作为参数传递以返回最终的 rebateAmount 作为总和?

表 A 包含:salesID, salesAmt 表 B 包含:salesID, sales%

如果可能的话,是否希望 TVF 返回 (salesAmt * sales%) as rebateAmount 的总和?这是 SQL Server 2014。

提前致谢。

【问题讨论】:

【参考方案1】:

将表格作为参数传递似乎无法解决您的问题。

相反,似乎有一种更简单的方法: -- 创建临时表 创建表 #a (salesID int, salesAmt decimal(15,2) ) 创建表 #b (salesID int, salesPerc decimal(5,2) )

-- insert data
Insert into #a
Select 1, 2567.34
Union
Select 2, 335.57
Union
Select 3, 95.35
Union
Select 4, 303.83
Union
Select 5, 743.66

-- insert data
Insert into #b
Select 1, 4.5
Union
Select 2, 10.0
Union
Select 3, 2.5
Union
Select 4, 6.0
Union
Select 5, 20.0

-- to get the data of individual columns + the multiple of the salesAmt & salesPerc
Select a.*, b.salesPerc, convert(decimal(15,2), a.salesAmt * b.salesPerc )                        as Mult from #a a inner join #b b on a.salesID = b.salesID

-- to get the sum of the multiple of the salesAmt & salesPerc
Select Sum (convert(decimal(15,2), a.salesAmt * b.salesPerc )) as SumOfMult from #a a inner join #b b on a.salesID = b.salesID

【讨论】:

以上是关于SQL 将表作为参数传递?的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 存储过程中将表作为参数传递

pl/sql 过程不允许将表名/视图名作为参数传递

如何将表名和选定字段作为参数传递

将表名作为参数传递时 PL/SQL 函数不起作用

存储过程,将表名作为参数传递

如何将表作为参数传递并使用 plsql 过程填充该表