Я не думаю, что существует один общий способ, который работает для всех баз данных, поскольку это что-то очень специфическое, что зависит от того, как построена БД.
Но почему вы хотите сделать это, используя определенный запрос?
Не можете ли вы абстрагировать реализацию от того, что вы хотите сделать?
Я имею в виду: почему бы не создать универсальный интерфейс, в котором есть, например, метод с именем TableExists (string tablename).
Затем для каждой СУБД, которую вы хотите поддерживать, вы создаете класс, который реализует этот интерфейс, а в методе TableExists вы пишете специальную логику для этой СУБД.
Реализация SQLServer будет содержать запрос, который запрашивает системные объекты.
В вашем приложении вы можете иметь фабричный класс, который создает правильную реализацию для данного контекста, а затем вы просто вызываете метод TableExists.
Например:
IMyInterface foo = MyFactory.CreateMyInterface (SupportedDbms.SqlServer);
if( foo.TableExists ("mytable") )
...
Я думаю, именно так я и должен это делать.