将 temptable 中的列作为参数传递给存储过程?
pass a column in a temptable to a stored procedure as a parameter?
我有一个存储过程,通常每次每个参数只取一个值。
USE [BannerLink]
GO
DECLARE @return_value int
EXEC @return_value = [dbo [BannerSummaryReportNoTag]
@BannerID = 31606,
@TagName = 'SOSEnglishIBVNoCover'
现在我有一个带有多个 BannerID 和 Tagname 的 temptable。我想知道是否有办法用来自 temptable 的数据填充存储过程。所以伪代码是这样的
USE [BannerLink]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[BannerSummaryReportNoTag]
@BannerID = #tmptable1.BannerID,
@TagName = #tmptable1.TagName
上面的代码显然不起作用,但我想知道如何在 SQL Server
中做到这一点。谢谢!
您可以使用 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
最好的解决方案是使用 Table 类型参数,或者你需要一个性能杀手游标,像这样...
USE [BannerLink]
GO
DECLARE @return_value INT
,@BannerID INT
,@TagName VARCHAR(1000)
DECLARE cur CURSOR LOCAL FORWARD_ONLY FOR
SELECT BannerID , TagName
FROM #tmptable1
OPEN cur
FETCH NEXT FROM cur INTO @BannerID, @TagName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @return_value = [dbo].[BannerSummaryReportNoTag]
@BannerID = @BannerID
,@TagName = @TagName
FETCH NEXT FROM cur INTO @BannerID, @TagName
END
CLOSE cur
DEALLOCATE cur
我有一个存储过程,通常每次每个参数只取一个值。
USE [BannerLink]
GO
DECLARE @return_value int
EXEC @return_value = [dbo [BannerSummaryReportNoTag]
@BannerID = 31606,
@TagName = 'SOSEnglishIBVNoCover'
现在我有一个带有多个 BannerID 和 Tagname 的 temptable。我想知道是否有办法用来自 temptable 的数据填充存储过程。所以伪代码是这样的
USE [BannerLink]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[BannerSummaryReportNoTag]
@BannerID = #tmptable1.BannerID,
@TagName = #tmptable1.TagName
上面的代码显然不起作用,但我想知道如何在 SQL Server
中做到这一点。谢谢!
您可以使用 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
最好的解决方案是使用 Table 类型参数,或者你需要一个性能杀手游标,像这样...
USE [BannerLink]
GO
DECLARE @return_value INT
,@BannerID INT
,@TagName VARCHAR(1000)
DECLARE cur CURSOR LOCAL FORWARD_ONLY FOR
SELECT BannerID , TagName
FROM #tmptable1
OPEN cur
FETCH NEXT FROM cur INTO @BannerID, @TagName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @return_value = [dbo].[BannerSummaryReportNoTag]
@BannerID = @BannerID
,@TagName = @TagName
FETCH NEXT FROM cur INTO @BannerID, @TagName
END
CLOSE cur
DEALLOCATE cur