通过变量表返回记录集为什么不可以呢

yetty_fjf 2003-04-07 03:39:21
CREATE PROCEDURE [Test_Production] (@CompanyId varchar(20),@WorkDateFrom datetime,@WorkDateTo datetime,@Results varchar(200) out)
AS

declare @Product table (WorkDate datetime,TypeName varchar(200),Amount float)

insert into @Product(WorkDate,TypeName,Amount) select WorkDate,TypeName,Amount from v_Production where CompanyId=@CompanyId and WorkDate>=@WorkDateFrom and workDate<=@WorkDateTo
----1
select * from @Product
----2
-- select * from v_Production

上述存储过程中如果用1即变量表来返回记录集,提示说记录集关闭
只有用2即物理表查询返回记录集才没问题

哪位高人指点一下
...全文
106 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yetty_fjf 2003-04-07
  • 打赏
  • 举报
回复
我明白了
wuqiuzhi(孜孜):你说的对,变量表是局部变量,所以无法传到
客户端
大力则提供了一种间接传递的方法
谢谢
yetty_fjf 2003-04-07
  • 打赏
  • 举报
回复
大力:好像通过函数没有办法直接返回记录集到客户端把


wuqiuzhi(孜孜):是在内部,我是想把变量表记录集返回给客户端
pengdali 2003-04-07
  • 打赏
  • 举报
回复
返回 table 数据类型的用户定义函数
返回 table 的用户定义函数可以是替代视图的强大方式。返回 table 的用户定义函数可用在 Transact-SQL 查询中允许表或视图表达式的地方。视图限制于单个 SELECT 语句,而用户定义函数可包含允许比视图中具有的逻辑功能更强大的附加语句。

返回 table 的用户定义函数还可替换返回单个结果集的存储过程。可在 Transact-SQL 语句的 FROM 子句中引用由用户定义函数返回的 table,而返回结果集的存储过程却不能。例如,假设 fn_EmployeesInDept 是返回 table 的用户定义函数并可由 SELECT 语句唤醒调用,如下所示:

SELECT * FROM tb_Employees AS E INNER JOIN
dbo.fn_EmployeesInDept('shipping') AS EID
ON E.EmployeeID = EID.EmployeeID

在返回 table 的用户定义函数中:

RETURNS 子句为函数返回的表定义局部返回变量名。RETURNS 子句还定义表的格式。局部返回变量名的作用域位于函数内。


函数主体中的 Transact-SQL 语句生成行并将其插入 RETURNS 子句所定义的返回变量。


当执行 RETURN 语句时,插入变量的行以函数的表格格式输出形式返回。RETURN 语句不能有参数。
函数中返回 table 的 Transact-SQL 语句不能直接将结果集返回用户。函数返回用户的唯一信息是由该函数返回的 table。

下例在 Northwind 数据库中创建一个返回 table 的函数:

CREATE FUNCTION LargeOrderShippers ( @FreightParm money )
RETURNS @OrderShipperTab TABLE
(
ShipperID int,
ShipperName nvarchar(80),
OrderID int,
ShippedDate datetime,
Freight money
)
AS
BEGIN
INSERT @OrderShipperTab
SELECT S.ShipperID, S.CompanyName,
O.OrderID, O.ShippedDate, O.Freight
FROM Shippers AS S INNER JOIN Orders AS O
ON S.ShipperID = O.ShipVia
WHERE O.Freight > @FreightParm
RETURN
END

在这个函数中,返回的本地变量名是 @OrderShipperTab。函数主体中的语句将行插入变量 @OrderShipperTab,以生成该函数返回的表结果。

下面的查询在其 FROM 子句中引用函数返回的表:

SELECT *
FROM LargeOrderShippers( $500 )
wuqiuzhi 2003-04-07
  • 打赏
  • 举报
回复
你的那两个查询是不是在存储过程外面哦,如果是外面就是正确的,因为变量在其外会自动被清除。
如果在存储过程内部,就不清楚原因是什么了。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧