Sql服务器 - “地图”功能?
我有一个存储过程需要一个product_id并返回有关产品的一些数据。我想做一个查询或过程,将这个存储过程映射到“select * from products”查询。有没有办法做到这一点?Sql服务器 - “地图”功能?
这听起来像你需要一个用户定义的功能,而不是一个存储过程。用户定义的函数可以作为查询的一部分进行评估(例如,SELECT id,myFunc(id)AS'Product Info'FROM Products)。
见CREATE FUNCTION在SQL Server BOL
顺便说一句,存储的特效被允许是非确定性的,而UDF是不是。如果您当前的存储过程是非确定性的,那么您需要重构/重新设计才能创建可包含在查询中的UDF。
您的存储过程将product_id作为参数,并返回单个产品的信息。你想要做的是在查询中使用该存储过程,以便获得一组结果,是否正确?
要做到这一点,你必须要么使用一个视图(如果它足够简单,这样做),或更可能改写存储过程作为一个用户定义的函数。如果你有一个名为GetInfoByProductId(@product_id)UDF返回单一产品一堆信息,那么你可以写,
select product_id, dbo.GetInfoByProductId(product_id) from products where ...
我想你可以定义一个内嵌表值函数,并在使用它笛卡尔产品风格JOIN
针对您的products
表。这种连接会模仿你所说的“地图”行为。
SELECT d.*
FROM products p JOIN getProductData(p.product_id) d
另一种方法可以创建,简化了存储过程(S)和可以重复使用跨两个不同的程序集的视图。
您的观点将负责完成所有联接并将主要和支持列汇总在一起。
您可以有一个存储过程,它接收product_id并返回该产品的记录集。这个过程会像select * from [viewname]那样product_id = @product_id。
其他程序将返回所有。这个过程看起来像select * from [viewname]。
JOIN不允许您引用'p',您必须使用APPLY。 – 2010-01-13 21:34:24
谢谢@Remus,我不是一个普通的微软开发人员。 – 2010-01-13 21:35:42