如何映射具有动态旋转字段的存储过程

时间:2011-10-10 11:05:55

标签: entity-framework

我有一个存储过程,它将pivot个字段作为参数(比如说@P),并按,进行拆分 并且我基于@P包含它们的字段来转动表格,我想在EF中映射存储过程。但是不知道如何根据存储过程的结果创建具有动态字段数的复杂类型。 我有类似的事情:

CREATE PROC pr 
@p AS NVARCHAR(500)='[250], [251], [256], [257], [260]'
AS 
DECLARE @qy NVARCHAR(500)


SET @qy='SELECT VendorID, '+dbo.SetAliasForPivotingCols(@p)+'
        FROM 
        (SELECT PurchaseOrderID, EmployeeID, VendorID
        FROM Purchasing.PurchaseOrderHeader) p
        PIVOT
        (
        COUNT (PurchaseOrderID)
        FOR EmployeeID IN
        ( '+@p+' )
        ) AS pvt
        ORDER BY pvt.VendorID;
EXEC sp_executesql @qy

在旋转字段后附加别名(想象一下如果它的复杂,我不会这样做):

CREATE FUNCTION [dbo].[SetAliasForPivotingCols](@RequestedRscsId NVARCHAR(500))RETURNS `NVARCHAR(2000)`
BEGIN
SET @RequestedRscsId=','+@RequestedRscsId
DECLARE @ReturnValue NVARCHAR(2000)=''
DECLARE @CloseBraceIndex INT
DECLARE @Alias NVARCHAR(10)
WHILE LEN(@RequestedRscsId)>1
BEGIN
    SET @CloseBraceIndex=PATINDEX('%]%',@RequestedRscsId)
    SET @Alias=SUBSTRING(@RequestedRscsId,2,@CloseBraceIndex-1)
    SET @RequestedRscsId   =SUBSTRING(@RequestedRscsId,@CloseBraceIndex+1,LEN(@RequestedRscsId)-@CloseBraceIndex+1)
    SET @ReturnValue+=',SUM('+@Alias+')'+' AS '+SUBSTRING(@Alias,1,LEN(@Alias))
END
RETURN SUBSTRING(@ReturnValue,2,LEN(@ReturnValue))
END

有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

这是不可能的。您必须使用经典的ADO.NET来使用这样的存储过程。