是否可以使用表作为存储过程的输入?
EXEC sp_Proc SELECT * FROM myTable
我创建了一个函数来返回一个由单个记录组成的表。
ALTER FUNCTION dbo.preEmail
(
@Num INT,
@WID INT
)
RETURNS
@Results TABLE
(
WID char(10),
Company nchar(50),
Tech nchar(25),
StartDate datetime,
Description varchar(max),
Address varchar(200),
Phone varchar(15),
Status varchar(35)
)
AS
BEGIN
INSERT INTO @Results
(WID, Company, Tech, StartDate, Description, Address, Phone, Status)
SELECT WID, company, tech, startDate, description, address, phone, status
FROM wo_tbl
WHERE Num = @Number AND wid = @WID
RETURN
END
GO
接下来,我有一个存储过程,向上述记录中安排的技术人员发送电子邮件。
EXEC sp_emailTech @WID, @Company, @Tech, @StartDate, @Description, @Address, @Phone, @Status.
但我宁愿做
EXEC sp_emailTech SELECT * FROM dbo.preEmail(1, 5746)
答案 0 :(得分:3)
不,您不能将表作为参数传递。
但是,您可以查看使用Use Table-Valued Parameters (Database Engine)(SQL Server 2008版)
在您的情况下,您似乎可能正在考虑使用DECLARE CURSOR (Transact-SQL)而不是。
请注意,光标执行确实会对基于集合的查询造成性能损失。
回复@Aaron Bertrand评论
DECLARE @id INT,
@name varchar(5)
DECLARE Cur CURSOR FOR
SELECT *
FROM myTable
OPEN Cur
FETCH NEXT FROM Cur INTO @ID, @Name
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_Proc @id, @Name
FETCH NEXT FROM Cur INTO @ID, @Name
END
CLOSE Cur
DEALLOCATE Cur
答案 1 :(得分:0)
首先,声明一个表变量来保存结果。然后,使用rigth参数执行SP,并将结果保存在先前声明的表变量中。然后,选择此表的内容。
答案 2 :(得分:0)