diff --git a/sqlsrv/database.inc b/sqlsrv/database.inc
index cf76faa..aeec273 100755
--- a/sqlsrv/database.inc
+++ b/sqlsrv/database.inc
@@ -427,12 +427,11 @@ class DatabaseStatement_sqlsrv extends DatabaseStatementPrefetch implements Iter
       }
     }
 
-    try {
+    $this->data = array();
+    // Only call fetch() if we are executing a SELECT statement.
+    if (strncasecmp(ltrim($this->queryString, "\t\n\r\0\x0B ("),'SELECT ',7)==0) { // strlen('SELECT ')=7
       $this->data = $statement->fetchAll(PDO::FETCH_ASSOC);
     }
-    catch (Exception $e) {
-      $this->data = array();
-    }
 
     $this->resultRowCount = count($this->data);
 
diff --git a/sqlsrv/schema.inc b/sqlsrv/schema.inc
index d0354a0..3cb07df 100755
--- a/sqlsrv/schema.inc
+++ b/sqlsrv/schema.inc
@@ -93,13 +93,13 @@ class DatabaseSchema_sqlsrv extends DatabaseSchema {
   }
 
   public function tableExists($table) {
-    try {
-      $this->connection->query('SELECT TOP(1) 1 FROM {' . $table . '}');
-      return TRUE;
-    }
-    catch (PDOException $e) {
-      return FALSE;
-    }
+    $table_info = $this->getPrefixInfo($table);
+    $sql_query = 'SELECT 1 AS table_exists FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = :schema_name AND TABLE_NAME = :table_name';
+    $sql_args = array(
+        ':schema_name' => $table_info['schema'],
+        ':table_name' => $table_info['table'],
+    );
+    return $this->connection->query($sql_query, $sql_args)->fetch();
   }
 
   /**
@@ -327,13 +327,9 @@ class DatabaseSchema_sqlsrv extends DatabaseSchema {
   }
 
   public function fieldExists($table, $field) {
-    try {
-      $this->connection->query('SELECT TOP(1) [' . $field . '] FROM {' . $table . '}');
-      return TRUE;
-    }
-    catch (PDOException $e) {
-      return FALSE;
-    }
+    $sql_query = "SELECT COL_LENGTH('{$table}','$field') AS field_len FROM INFORMATION_SCHEMA.TABLES";
+    $theRow = $this->connection->query($sql_query)->fetch();
+    return !is_null($theRow->field_len);
   }
 
   /**
