SQL Select * Из Object_ID

У этого может быть очевидный ответ, но мой поиск в Google не предоставил и не ответил

почему я не могу выполнить запрос, например

Select * FROM OBJECT_ID

Где в этом случае я не имею в виду использование функции Object_ID('TableName'), я имею в виду фактический идентификатор INT, связанный с таблицей, как указано в sys.Tables.

Я только что наткнулся на две таблицы в БД, над которыми я работаю, через sys.Tables, и у них было одно и то же имя (OE_Down), но разные схемы (очевидно), и вот что я думаю об этом.

Итак, если я предварительно сформулирую запрос SELECT * FROM OE_DOWN, результатом будет схема dbo, которую я предполагаю, что она выглядит по умолчанию. Я знаю, что правильной практикой было бы указать схему вместе с таблицей, но почему бы вместо этого не использовать их идентификаторы объектов, поскольку они уникальны по сравнению с чем-либо еще.


person HelloWorld    schedule 06.12.2013    source источник
comment
Я не уверен, что то, что вы хотите сделать, возможно. Я думаю, было бы проще просто добавить правильную схему или переименовать другую таблицу. Я попробовал несколько подходов и не смог сделать то, что вы хотите.   -  person Russ960    schedule 06.12.2013
comment
Причина в том, что я имею дело с object_id и в настоящее время использую динамический SQL для запроса этих таблиц. Но пока я работал, я думал об этом и не нашел ответа, поэтому решил спросить.   -  person HelloWorld    schedule 06.12.2013


Ответы (1)


Поскольку object_id не является объектом в базе данных, это просто поле sys.Tables...

И вы не можете делать прямые операторы dml (язык манипулирования данными) для значений полей, а только для объектов db (схемы).

Запрос sys.tables можно использовать для создания динамического sql, но не прямых операторов dml.

person Raphaël Althaus    schedule 06.12.2013