Получение информации об объектах - PullRequest
2 голосов
/ 18 октября 2011

Я пытаюсь получить информацию о таблице и столбце. Итак, я написал два запроса, как это:

SELECT * FROM Chag.sys.columns c
WHERE OBJECT_NAME(c.object_id)='Aduser'

SELECT * FROM Chag.sys.tables so
WHERE so.name = 'Aduser' AND SCHEMA_NAME(so.schema_id) = 'Tref'

Эти два прекрасно работают, когда я выполняю их в базе данных Chag, но когда я выполняю это в другой базе данных, они не возвращают ничего.

Я хочу выполнить их в другой базе данных, так как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 19 октября 2011

Функция OBJECT_NAME() принимает дополнительный параметр идентификатора базы данных. Что касается SCHEMA_NAME(), вам, вероятно, следует заменить его на OBJECT_SCHEMA_NAME(), что эквивалентно SCHEMA_NAME(), только он использует идентификатор объекта вместо идентификатора схемы и принимает базу данных Идентификатор также как второй (необязательный) параметр.

Вы можете использовать DB_ID(), чтобы получить идентификатор указанной базы данных.

Вот измененные версии ваших заявлений:

SELECT *
FROM Chag.sys.columns c
WHERE OBJECT_NAME(c.object_id, DB_ID('Chag'))='Aduser'

SELECT *
FROM Chag.sys.tables so
WHERE so.name = 'Aduser'
  AND OBJECT_SCHEMA_NAME(so.object_id, DB_ID('Chag')) = 'Tref'
2 голосов
/ 19 октября 2011

Если причина кроется в функциях OBJECT_NAME, SCHEMA_NAME, как указала Акула, то получение данных из соответствующих представлений вместо вызова этих функций может помочь:

select c.* from chag.sys.columns c
join chag.sys.objects o on 
    c.object_id = o.object_id
where o.name = 'Aduser'

select t.* from chag.sys.tables t
join chag.sys.schemas s on
    t.schema_id = s.schema_id
where t.name = 'Aduser' and s.name = 'Tref'
0 голосов
/ 18 октября 2011

Поскольку вы используете ссылку Database.Schema.Object. Попробуйте запустить это для других баз данных:

SELECT * FROM sys.columns c 
WHERE OBJECT_NAME(c.object_id)='Aduser' 

SELECT * FROM sys.tables so 
WHERE so.name = 'Aduser' AND SCHEMA_NAME(so.schema_id) = 'Tref' 

Заметьте, однако, что если нет объектов 'Aduser' или 'Tref', вы не получите результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...