Добрый вечер, уважаемые коллеги.
Разобрался с этой темой, но не до конца. В хранимой процедуре обращаюсь к другой БД, извлекаю из нее данные, читаю в AX следующим методом:
X++:
public static server void testExport()
{
Connection conn;
Statement stmt;
str expr = "EXEC [dbo].[usp_DenisTest]";
ResultSet rs;
SqlStatementExecutePermission perm = new SqlStatementExecutePermission(expr);
;
conn = new Connection();
perm.assert();
stmt = conn.createStatement();
// BP deviation documented
rs = stmt.executeQuery(expr);
while (rs.next())
{
info(rs.getString(1));
}
rs.close();
CodeAccessPermission::revertAssert();
}
Текст хранимой процедуры - следующий:
X++:
USE [PRD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_DenisTest]
AS
BEGIN
SELECT ProdId, WrkCtrId, ItemId FROM [CSF_PRD].[dbo].[SFMatl] AS SFMatl
WHERE SFMatl.CompanyId = 'dat'
AND SFMatl.WrkCtrId = 'E01'
AND SFMatl.PrOdId = 'W000004'
END
Главное - проставить в SQL Server разрешения на запуск нужной SP для AOS-аккаунта. Все отлично работает.
Но стоит только настроить процедуру на работу с временными таблицами, как возникает ошибка такого рода:
SQL error description: [Microsoft][ODBC SQL Server Driver]Invalid cursor state
Вот текст процедуры, использующей временную таблицу:
X++:
USE [PRD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_DenisTest2]
AS
BEGIN
SET NOCOUNT ON
CREATE TABLE #TempCustTable (
AccountNum varchar(10) COLLATE Latin1_General_CI_AI
, CustName varchar(50) COLLATE Latin1_General_CI_AI
)
INSERT INTO #TempCustTable (AccountNum, CustName)
SELECT AccountNum, Name FROM CustTable
WHERE CustTable.DataAreaId = 'dat'
AND CustTable.Name LIKE 'S%'
SET NOCOUNT OFF
SELECT * FROM #TempCustTable
DROP TABLE #TempCustTable
END
Также пробовал менять SET NOCOUNT, но как видите, особого результата не добился.
Может кто-нибудь подсказать, как мне использовать временные таблицы на стороне SQL Server, чтобы можно было нормально прочитать выборку в AX?
P.S. Спешу напомнить, что мне обязательно нужно обратиться к другой базе, поэтому использую хранимые процедуры.