0

是否可以使用表作为存储过程的输入?

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)
4

3 回答 3

3

不,您不能像这样将表作为参数传递。

但是,您可以查看使用表值参数(数据库引擎)(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
于 2013-08-12T17:00:32.997 回答
0

您还应该看看这个已解决的 SO 线程。另外,我建议您查看 OPENXML 查询(传入表 xml 并使用 xpath 访问相应的字段)。

请参阅以下示例:

示例 1

示例 2

于 2013-08-12T17:33:33.017 回答
0

首先,声明一个表变量来保存结果。然后,使用 rigth 参数执行 SP,并将结果保存在先前声明的表变量中。然后,选择该表的内容。

于 2013-08-12T17:02:00.537 回答