将temptable中的列作为参数传递给存储过程?

时间:2015-04-22 21:10:03

标签: sql-server stored-procedures

我有一个存储过程,通常每个参数一次只能获取一个值。

USE [BannerLink] 
GO 

DECLARE @return_value int 
EXEC    @return_value = [dbo [BannerSummaryReportNoTag]
                        @BannerID = 31606,
                        @TagName = 'SOSEnglishIBVNoCover'

现在我有一个包含多个BannerID和Tagnames的临时表。我想知道是否有办法用temptable中的数据填充存储过程。所以PSEUDO CODE就是这样的

USE [BannerLink] 
GO 

DECLARE @return_value int 
EXEC    @return_value = [dbo].[BannerSummaryReportNoTag]
                        @BannerID = #tmptable1.BannerID,
                        @TagName = #tmptable1.TagName

上面的代码显然不起作用,但我想知道如何在SQL Server中执行此操作。谢谢!

2 个答案:

答案 0 :(得分:2)

最佳解决方案是使用表类型参数,或者你需要一个性能杀手光标,就像这样......

async

答案 1 :(得分:1)

您可以使用Table Type执行此操作。创建类型:

CREATE TYPE MyTableType AS TABLE 
( TagName VARCHAR(50)
, BannerID INT );

改变你的过程:

ALTER PROCEDURE [dbo].[BannerSummaryReportNoTag]
@Banners MyTableType READONLY
AS
....

称之为:

DECLARE @T MyTableType
INSER INTO t VALUES ...

EXEC [dbo].[BannerSummaryReportNoTag] @Banners = @t