diff --git a/src/box/sql/main.c b/src/box/sql/main.c
index 0e430470342d9ffd9615796dc9aba744f6e9a1f8..17ddf5a566cd0e0e682043eee74978ad6e066024 100644
--- a/src/box/sql/main.c
+++ b/src/box/sql/main.c
@@ -496,22 +496,6 @@ sql_create_function_v2(sql * db,
 	return rc;
 }
 
-/*
- * Return the most recent error code generated by an sql routine. If NULL is
- * passed to this function, we assume a malloc() failed during sql_open().
- */
-int
-sql_errcode(sql * db)
-{
-	if (db && !sqlSafetyCheckSickOrOk(db)) {
-		return SQL_MISUSE;
-	}
-	if (!db || db->mallocFailed) {
-		return SQL_NOMEM;
-	}
-	return db->errCode & db->errMask;
-}
-
 /*
  * This array defines hard upper bounds on limit values.  The
  * initializer must be kept in sync with the SQL_LIMIT_*
@@ -655,7 +639,6 @@ sql_init_db(sql **out_db)
 	 */
 	sqlError(db, SQL_OK);
 	sqlRegisterPerConnectionBuiltinFunctions(db);
-	rc = sql_errcode(db);
 
 	if (rc)
 		sqlError(db, rc);
@@ -665,7 +648,6 @@ sql_init_db(sql **out_db)
 		       sqlGlobalConfig.nLookaside);
 
 opendb_out:
-	rc = sql_errcode(db);
 	assert(db != 0 || rc == SQL_NOMEM);
 	if (rc == SQL_NOMEM) {
 		sql_close(db);
diff --git a/src/box/sql/prepare.c b/src/box/sql/prepare.c
index ad4c71cb6e1dab286f842b2d57a76d93934db2e4..e2f8c0b7c520a6e899dcc115d594b0079a18bc3d 100644
--- a/src/box/sql/prepare.c
+++ b/src/box/sql/prepare.c
@@ -166,8 +166,6 @@ sqlPrepare(sql * db,	/* Database handle. */
 		*ppStmt = (sql_stmt *) sParse.pVdbe;
 	}
 
-	db->errCode = rc;
-
 	/* Delete any TriggerPrg structures allocated while parsing this statement. */
 	while (sParse.pTriggerPrg) {
 		TriggerPrg *pT = sParse.pTriggerPrg;
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index e044b20097f2e5a0b0b346448110b28348642594..4862794aae74638d7ceed862f970de10d8a86ef9 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -1257,7 +1257,6 @@ struct sql {
 	struct Vdbe *pVdbe;	/* List of active virtual machines */
 	struct coll *pDfltColl;	/* The default collating sequence (BINARY) */
 	i64 szMmap;		/* Default mmap_size setting */
-	int errCode;		/* Most recent error code (sql_*) */
 	int errMask;		/* & result codes with this before returning */
 	int iSysErrno;		/* Errno value from last system error */
 	u16 dbOptFlags;		/* Flags to enable/disable optimizations */
diff --git a/src/box/sql/util.c b/src/box/sql/util.c
index cc6cee175342f0638f2cd62ff7697f3c0d456653..7596c6cb7c24ec2b3e57567825d7d919128d093e 100644
--- a/src/box/sql/util.c
+++ b/src/box/sql/util.c
@@ -111,7 +111,6 @@ void
 sqlError(sql * db, int err_code)
 {
 	assert(db != 0);
-	db->errCode = err_code;
 	if (err_code)
 		sqlErrorFinish(db, err_code);
 }
@@ -156,7 +155,6 @@ void
 sqlErrorWithMsg(sql * db, int err_code, const char *zFormat, ...)
 {
 	assert(db != 0);
-	db->errCode = err_code;
 	sqlSystemError(db, err_code);
 	if (zFormat == 0)
 		sqlError(db, err_code);
diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
index c7fe1f317e89bdeecfda1aff6d9770c46f1e1eb1..98d708a2bc4c2c3d6aed776a1397ce964108c746 100644
--- a/src/box/sql/vdbeapi.c
+++ b/src/box/sql/vdbeapi.c
@@ -495,7 +495,6 @@ sqlStep(Vdbe * p)
 	if (rc != SQL_ROW)
 		checkProfileCallback(db, p);
 
-	db->errCode = rc;
 	if (SQL_NOMEM == sqlApiExit(p->db, p->rc)) {
 		p->rc = SQL_NOMEM;
 	}