Sql 以表作为输入执行存储过程
是否可以使用表作为存储过程的输入Sql 以表作为输入执行存储过程,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,是否可以使用表作为存储过程的输入 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
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)
不,不能将表作为那样的参数传递 不过,您可以考虑使用(SQLServer2008以上版本) 然而,在您的情况下,似乎您可能正在考虑使用一个相当简单的方法 请注意,游标执行确实会对基于集合的查询的性能产生影响 Re@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
不,不能将表作为那样的参数传递 不过,您可以考虑使用(SQLServer2008以上版本) 然而,在您的情况下,似乎您可能正在考虑使用一个相当简单的方法 请注意,游标执行确实会对基于集合的查询的性能产生影响 Re@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
首先,声明一个表变量来保存结果。然后,使用rigth参数执行SP,并将结果保存在前面声明的表变量中。然后,选择此表的内容。首先,声明一个表变量以保存结果。然后,使用rigth参数执行SP,并将结果保存在前面声明的表变量中。然后,选择此表的内容。您还应该查看已解决的SO线程。另外,我建议您看看OPENXML查询(传入表xml并使用xpath访问相应字段) 参见以下示例:
您还应该查看已解决的SO线程。另外,我建议您看看OPENXML查询(传入表xml并使用xpath访问相应字段) 参见以下示例:
什么版本的sql server?您可以传入表名,然后从动态sql执行操作。但是为什么呢?你到底想完成什么?你应该问这个问题,而不是问如何以这种特定的方式解决这个问题。我使用的是Microsoft SQL 2005存储过程为另一个电子邮件发送存储过程获取多个字段的一条记录。好的,那么你真正需要的是为表中的每一行执行一个存储过程,对吗?您是否可以更新该问题以使其更清楚,并删除有关将表或查询传递到存储过程的部分?sql server的哪个版本?您可以传入表名,然后从动态sql执行操作。但是为什么呢?你到底想完成什么?你应该问这个问题,而不是问如何以这种特定的方式解决这个问题。我使用的是Microsoft SQL 2005存储过程为另一个电子邮件发送存储过程获取多个字段的一条记录。好的,那么你真正需要的是为表中的每一行执行一个存储过程,对吗?您是否可以更新问题以使其更清楚,并去掉关于将表或查询传递到存储过程的部分?为什么游标在这里有用?你能演示一下怎么做吗?@AaronBertrand,我添加了一个示例,但他是如何在存储过程中做到这一点的?存储过程不知道包含需要处理的数据的表的名称…我试图避免键入所有代码。我可以从问题中选择@myID=id、@myName=name,然后选择exec sp_proc@myID、@myName。更像是OP试图为一个行集(在本例中是一个用户表)执行一个SP。我是否误解了OPs要求?为什么光标在这里有用?你能演示一下怎么做吗?@AaronBertrand,我添加了一个示例,但他是如何在存储过程中做到这一点的?存储过程不知道包含需要处理的数据的表的名称…我试图避免键入所有代码。我可以从问题中选择@myID=id、@myName=name,然后选择exec sp_proc@myID、@myName。更像是OP试图为一个行集(在本例中是一个用户表)执行一个SP。我是否误解了老年退休金计划的要求?