【发布时间】:2025-12-22 00:00:14
【问题描述】:
在 MS Access 中,您可以同时使用表和 SELECT 查询来执行以下操作
FROM Product INNER JOIN outputQry ON Product.ProductId = outputQry.ProductId
假设 Product 是一个表并且 outputQry 一个查询,在 T-SQL 中如何做呢?
我编写了一个返回表的函数,如何在另一个函数/过程中执行它,以便我可以(例如)将结果与某些表进行 INNER JOIN?
我的函数是这样的
ALTER FUNCTION [dbo].[PreconfiguredConfigs_GetNoOfOutputs]()
RETURNS @outputTable TABLE
(
ProductId int,
NumberOfOutputs int
)
AS
BEGIN
DECLARE @table TABLE
(
ProductId int,
NumberOfOutputs int
)
INSERT INTO @table
SELECT Outputs.ProductId, Count(Outputs.ProductId) AS NumberOfOutputs
FROM [dbo.PreconfiguredConfigs].[Outputs]
GROUP BY Outputs.ProductId;
INSERT INTO @outputTable
SELECT ProductId, NumberOfOutputs FROM @table
RETURN
END
编辑:一个额外的要求是我可以“链接”这些函数,因此上面编写的结果可以在另一个函数中使用(INNER JOINing it with other columns),并且该函数的结果也可以在另一个函数中使用(也可以加入这些函数)。
甚至可以完成还是我必须彻底改变我的设计?这些要求来自 Access 中数据库的设计方式。
This poster suggested 将 SELECT 查询放入表值函数中,我这样做了,但我不明白这一行:
SELECT * INTO CustList FROM CustomersbyRegion(1)
什么是CustList?每当调用函数时,它是否会被覆盖数据库中的表?我想这将是一个解决方案,因为这样我就可以 INNER JOIN 一切我想要的,并避免我在使用变量和临时表时看到的所有 Invalid column name 错误(更多关于我对 Rick S 的评论)
【问题讨论】:
-
感谢您的建议,但我很确定那里的解决方案都没有帮助我。当我尝试再次重用我的程序时,选定的答案会失败 - 创建两个级别的 EXEC,我发现它无法完成的艰难方法。我不能使用 OPENROWSET,因为那里有人评论说这不是正确的解决方案,而是“黑客”,最重要的是,我无法打开与数据库的连接,因为我在服务器上没有必要的权限。 .. 也许我应该在我的问题中包含该信息,但在发布时我无法知道这与它相关。
标签: sql-server ms-access