Цитата:
Сообщение от
AndyD
оберните свои запросы в блок try/catch внутри T-SQL
Не помогло
Вот тестовый пример, аналогичный описываемой задаче:
X++:
public server static void testSQL()
{
Set permissionSet = new Set(Types::Class);
Connection connection;
Statement statement;
str query;
TestTable3798 testTable; //test table (SaveDataPerCompany = No) with one field str[10] named Field1
;
query += "BEGIN TRY \n";
query += "BEGIN TRANSACTION; \n";
query += "SELECT TOP 1 * FROM CustTable; \n";
query += "INSERT INTO TESTTABLE3798 (Field1, RecId) VALUES ('test', 123456); \n" ;
query += "SELECT TOP 1 * FROM SYSTEMSEQUENCES WHERE NAME = -1; \n"; //query with error
query += "COMMIT TRANSACTION; \n";
query += "END TRY \n";
query += "BEGIN CATCH \n";
query += "ROLLBACK TRANSACTION; \n";
query += "THROW; \n";
query += "END CATCH \n";
connection = new Connection();
statement = connection.createStatement();
permissionSet.add(new SqlStatementExecutePermission(query));
CodeAccessPermission::assertMultiple(permissionSet);
statement.executeUpdate(query);
CodeAccessPermission::revertAssert();
}
запрос получается вот такой
Код:
BEGIN TRY
BEGIN TRANSACTION;
SELECT TOP 1 * FROM CustTable;
INSERT INTO TESTTABLE3798 (Field1, RecId) VALUES ('test', 123456);
SELECT TOP 1 * FROM SYSTEMSEQUENCES WHERE NAME = -1;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
THROW;
END CATCH
валидацию он проходит, но в рантайме дает ошибку
Цитата:
(1 row(s) affected)
(1 row(s) affected)
(0 row(s) affected)
Msg 245, Level 16, State 1, Line 5
Conversion failed when converting the nvarchar value 'Event' to data type int.
в указанном выше X++ statement.updateQuery() выполняется без ошибки