Хранимая процедура SQL возвращает int вместо ObjectResult или ColumnList или Metadata при обновлении этой хранимой процедуры в EDMX.
Я попытался, установив SET FMTONLY OFF в начале хранимой процедуры, удалил все RowCounts в хранимой процедуре, но, к сожалению, это не сработало.
USE [DBNAME]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [API].[GETTest]
(
@I_MSA NVARCHAR(8) = NULL,
@I_PAYEE VARCHAR(8) = NULL,
@I_LOGINID VARCHAR(50) = NULL,
@PAYEE_COUNT INT OUTPUT
)
AS ; BEGIN
DECLARE @COUNT INT,
@ROW INT,
@LV_PAYEE VARCHAR(10);
--testing
CREATE TABLE #TempTable1 (ACCOUNT_TYPE VARCHAR(2), MASTER_DATA VARCHAR(10), MASTER_DESC VARCHAR(50));
CREATE TABLE #TempTable2 (ACCOUNT_TYPE VARCHAR(2), MASTER_DATA VARCHAR(10), MSA_NUM NVARCHAR(8), MASTER_DESC VARCHAR(50));
CREATE TABLE #TempTable3 (ACCOUNT_TYPE VARCHAR(2), MASTER_DATA VARCHAR(10));
-- Adding this part to get the metadata of the columns results
IF (1=0)
BEGIN
SET FMTONLY OFF
END
/* SET INPUT PARAMETERS*/
SET @I_MSA = RIGHT('0000000' + @I_MSA,7); -- PADDING ZEROS IN FRONT
SET @LV_PAYEE = RIGHT('0000000000' + @I_PAYEE,10); -- PADDING ZEROS IN FRONT
SET @I_LOGINID = UPPER(@I_LOGINID); -- CONVERTING THE LOGIN ID TO UPPER CASE
/* RETRIEVE DATA IF MSA IS PROVIDED */
IF @I_MSA IS NOT NULL
BEGIN
BEGIN TRY
INSERT INTO #TempTable1
EXEC API.GET_MSA_LOGIN_REPORT
@IS_MSA_NUMBER = @I_MSA,
@IS_ACCOUNT_TYPE = 'PA', -- PAYEE ACCOUNT TYPE
@IS_ROWCOUNT = @COUNT OUTPUT;
END TRY
/* Catch the Error Message and Suppress it */
BEGIN CATCH
-- Suppress the Error message we are getting from Source Stored Procedure
END CATCH
/* GET DATA IN TEMPORARY TABLE #TempTable3 IF @COUNT IS > 0 */
IF @COUNT > 0
BEGIN
INSERT INTO #TempTable3
SELECT ACCOUNT_TYPE,
MASTER_DATA
FROM #TempTable1
/* ASSIGN THE ROW COUNT OF #TempTable3 TO @ROW */
SELECT @ROW = @@ROWCOUNT;
DROP TABLE #TempTable1;
END
END
/* RETRIEVE DATA IF LOGIN ID IS PROVIDED */
ELSE IF @I_LOGINID IS NOT NULL
BEGIN
BEGIN TRY
INSERT INTO #TempTable2
EXEC API.GET_MSA_AGENT_REPORT
@IS_AGENT_ID = @I_LOGINID,
@IS_ACCOUNT_TYPE = 'PA', -- PAYEE ACCOUNT TYPE
@IS_ROWCOUNT = @COUNT OUTPUT;
END TRY
/* CATCH THE ERROR MESSAGE AND SUPPRESS IT */
BEGIN CATCH
-- IF LOGIN ID IS NOT AVAILABLE IN MSA AGENT THEN CHECK IT IN MSA LOGIN STORED PROCEDURE
--RAISERROR('LOGIN ID IS NOT AVAILABLE IN MSA AGENT PROCEDURE',1,1);
END CATCH
/* GET DATA IN TEMPORARY TABLE #TempTable3 IF @COUNT IS > 0 */
IF @COUNT > 0
BEGIN
INSERT INTO #TempTable3
SELECT ACCOUNT_TYPE,
MASTER_DATA
FROM #TempTable2
/* ASSIGN THE ROW COUNT OF #TempTable3 TO @ROW */
SELECT @ROW = @@ROWCOUNT;
DROP TABLE #TempTable2;
END
ELSE -- @COUNT IS 0
/* FETCH DATA FROM MSA LOGIN */
BEGIN
BEGIN TRY
INSERT INTO #TempTable1
EXEC API.GET_MSA_LOGIN_REPORT
@IS_LOGIN_ID = @I_LOGINID,
@IS_ACCOUNT_TYPE = 'PA', -- PAYEE ACCOUNT TYPE
@IS_ROWCOUNT = @COUNT OUTPUT;
END TRY
/* Catch the Error Message and Suppress it */
BEGIN CATCH
-- Suppress the Error message we are getting from Source Stored Procedure
END CATCH
/* GET DATA IN TEMPORARY TABLE #TempTable3 IF @COUNT IS > 0 */
IF @COUNT > 0
BEGIN
INSERT INTO #TempTable3
SELECT ACCOUNT_TYPE,
MASTER_DATA
FROM #TempTable1
/* ASSIGN THE ROW COUNT OF #TempTable3 TO @ROW */
SELECT @ROW = @@ROWCOUNT;
DROP TABLE #TempTable1;
END
END
END
/* IF PAYEE IS POPULATED */
ELSE IF @LV_PAYEE IS NOT NULL
BEGIN
INSERT INTO #TempTable3 VALUES ('PA', @LV_PAYEE)
/* ASSIGN THE ROW COUNT OF #TempTable3 TO @ROW */
SELECT @ROW = @@ROWCOUNT;
END
/* GET THE PAYEE INFO BASED ON PAYEE ID #TempTable3 */
IF @ROW > 0
BEGIN
SELECT B.ZMDIV AS 'DIVISION',
C.DIVISIONTXT AS 'DIV_NAME',
A.PERNR AS 'PAYEE',
A.ENAME AS 'PAYEE_NAME'
FROM #TempTable3 AS E
INNER JOIN SAP.PA0001 AS A
ON RIGHT(E.MASTER_DATA,8) = A.PERNR
INNER JOIN SAP.ZMTMDM_PROD_DIV AS B
ON A.ZZPRO = B.PRODUCER_NUM
INNER JOIN SAP.ZMTMDM_DIVISION AS C
ON B.ZMDIV = C.DIVISION
WHERE A.BUKRS > '1000'
AND A.BEGDA <= CONVERT(NVARCHAR, GETDATE(),112)
AND A.ENDDA >= CONVERT(NVARCHAR, GETDATE(),112)
AND B.VALID_FROM <= CONVERT(NVARCHAR, GETDATE(),112)
AND B.VALID_TO >= CONVERT(NVARCHAR, GETDATE(),112)
/* GET THE COUNT OF THE PAYEE DETAILS */
SELECT @PAYEE_COUNT = @@ROWCOUNT;
/* DROP TABLE #TempTable3 */
DROP TABLE #TempTable3;
/* IF PAYEE DETAILS EXIST THEN DISPLAY ELSE THROW ERROR */
--IF @PAYEE_COUNT <= 0
-- BEGIN
-- RAISERROR('No payee information exists for entered input',11,1)
-- END
END
ELSE
SELECT @PAYEE_COUNT = 0;
--BEGIN
-- RAISERROR('Entered input information is incorrect',11,1);
--END
END
Во время обновлениявышеупомянутая хранимая процедура SQL в EDMX обновляется как int вместо ObjectResult
как этот
public virtual int GETTest(string i_MSA, string i_PAYEE, string i_LOGINID, ObjectParameter pAYEE_COUNT)
вместо чего-то подобного
public virtual ObjectResult<GETTest_Result> GETTest(string i_MSA, string i_PAYEE, string i_LOGINID, ObjectParameter pAYEE_COUNT)
Я ценюлюбая помощь.