Как отобразить хранимые процедуры, имеющие динамически поворачиваемые поля - PullRequest
0 голосов
/ 10 октября 2011

У меня есть хранимая процедура, которая получает 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 Ответ

1 голос
/ 10 октября 2011

Это невозможно. Вы должны использовать такую ​​хранимую процедуру с классическим ADO.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...