在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将它与其他列连接),以及函数结果也可以用在另一个函数中(也可以加入这些函数)。
甚至可以完成,还是我必须彻底改变我的设计?要求来自数据库在Access中的设计方式。
This poster suggested将SELECT查询放在table-value函数中,我做了,但我不理解这一行:
SELECT * INTO CustList FROM CustomersbyRegion(1)
什么是CustList?数据库中的表是否会在调用函数时被覆盖?我想这将是一个解决方案,因为那时我可以INNER JOIN它我想要的所有并避免我在使用变量和临时表时看到的所有Invalid column name
错误(更多关于我对{{3的评论中的错误) }})
答案 0 :(得分:2)
您有几个选择:
1)将您的存储过程执行到临时表中,然后与临时表
连接CREATE TABLE #tempTable
(
COL1 INT,
COL2 INT
)
INSERT INTO #tempTable
Exec myStoredProcedure
2)创建一个用户定义的函数,该函数返回一个表并加入该表。
CREATE FUNCTION output
(
)
RETURNS TABLE
AS
RETURN
SELECT Outputs.ProductId, Count(Outputs.ProductId) AS NumberOfOutputs
FROM [dbo.PreconfiguredConfigs].[Outputs]
GROUP BY Outputs.ProductId
GO
答案 1 :(得分:1)
我相信Access在运行查询时所做的就是创建一个“视图”,这就是你可以加入它的原因。在SQL Server视图中以相同的方式起作用(对基表的任何更改在调用时都在视图中表示)。
create view output_vw
as
SELECT Outputs.ProductId, Count(Outputs.ProductId) AS NumberOfOutputs
FROM [dbo.PreconfiguredConfigs].[Outputs]
GROUP BY Outputs.ProductId
然后你可以加入到这个:
FROM Product INNER JOIN output_vw ON Product.ProductId = output_vw.ProductId