Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 object_name для дугой базы  [new]
Petrashkevich
Member

Откуда:
Сообщений: 72
Здравствуйте !!!

Делаю запрос, где одно из полей вычисляется так
SELECT 
AC.name, InPrimaryKey=CAST(ISNULL(cik.index_column_id, 0) AS bit),
IsForeignKey=CAST(case when F.parent_object_id is null then 0 else 1 end AS bit),
SystemType=ISNULL(Z.name, ''),
Length=CAST(CASE WHEN Z.name IN ('nchar', 'nvarchar') AND AC.max_length <> -1 THEN AC.max_length/2 ELSE AC.max_length END AS int),
NumericPrecision=CAST(AC.precision AS int),
NumericScale=CAST(AC.scale AS int),
AC.is_nullable,AC.is_computed,
IsSparse=CAST(AC.is_sparse AS bit),
IsColumnSet=CAST(AC.is_column_set AS bit),
ColDRIDefName=object_name(F.constraint_object_id)
from MyDatabase.sys.tables T
inner join MyDatabase.sys.all_columns AC on AC.object_id=T.object_id
left join MyDatabase.sys.indexes IK ON ik.object_id = AC.object_id and 1=ik.is_primary_key
left join MyDatabase.sys.index_columns CIK ON cik.index_id = ik.index_id and cik.column_id = AC.column_id and cik.object_id = AC.object_id and 0 = cik.is_included_column
left join MyDatabase.sys.types AS Z ON (Z.user_type_id = AC.system_type_id and Z.user_type_id = Z.system_type_id) or ((Z.system_type_id = AC.system_type_id) and (Z.user_type_id = AC.user_type_id) and (Z.is_user_defined = 0) and (Z.is_assembly_type = 1))
left join MyDatabase.sys.foreign_key_columns F on F.parent_column_id = AC.column_id and F.parent_object_id = AC.object_id
where (T.name='MyTableName' and SCHEMA_NAME(T.schema_id)='dbo')
order by AC.column_id ASC


При подключении к MyDatabase колонка выводит имена ключей, при подключении к master = NULL
Получается что функция object_name() контексто-зависимая
Пытаюсь написать MyDatabase.object_name() или MyDatabase.sys.object_name() - не получается.

Подскажите пожалуйста, как правильно обратиться к функции другой базы из master ?
21 сен 18, 10:23    [21681717]     Ответить | Цитировать Сообщить модератору
 Re: object_name для дугой базы  [new]
court
Member

Откуда:
Сообщений: 1985
Petrashkevich,

дык, 2-й параметр у OBJECT_NAME есть же

OBJECT_NAME ( object_id [, database_id ] )
21 сен 18, 10:25    [21681725]     Ответить | Цитировать Сообщить модератору
 Re: object_name для дугой базы  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
OBJECT_NAME(object_id, DB_ID('database'))
21 сен 18, 10:27    [21681727]     Ответить | Цитировать Сообщить модератору
 Re: object_name для дугой базы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
court
Petrashkevich,

дык, 2-й параметр у OBJECT_NAME есть же

OBJECT_NAME ( object_id [, database_id ] )
Когда-то такого параметра не было.
Так что зависит от версии.
21 сен 18, 10:48    [21681757]     Ответить | Цитировать Сообщить модератору
 Re: object_name для дугой базы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
court
Petrashkevich,

дык, 2-й параметр у OBJECT_NAME есть же

OBJECT_NAME ( object_id [, database_id ] )
Когда-то такого параметра не было.
Так что зависит от версии.
Хотя в этом случае есть такой параметр.
На эту мысль наводит схема sys, которой не было как раз тогда, когда и параметра не было.
21 сен 18, 10:49    [21681759]     Ответить | Цитировать Сообщить модератору
 Re: object_name для дугой базы  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33489
Блог
Сделайте еще один джойн с sys.objects в нужной вам базе
22 сен 18, 11:33    [21682595]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить