SQL Server 2008 sys.objects эквивалентен sysobjects.uid - PullRequest
1 голос
/ 23 ноября 2011

Кто-нибудь знает, как получить эквивалент столбца SQL Server 2000 sysobjects uid из представления 2005+ sys.objects (или другого)?

Я пытаюсь преобразовать этот код, так как мы избавляемся от всех sysobjects ссылок.

DECLARE GETOBJECTS CURSOR FOR 
SELECT NAME, UID FROM SYSOBJECTS
WHERE TYPE IN ('U','P')
    AND UID <> 1
    AND LOWER(RTRIM(NAME)) NOT LIKE 'PB%'

Заранее спасибо,

Kevin

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

UID относится к идентификатору пользователя владельца объекта ...

В SQL 2005 и SQl 2008 его можно найти в

sys.sysobjects 

имя поля UID

Sys.sysobjects

UID = 1 - это пользователь dbo.

Так что использовать подпрограммыи таблицы и отфильтровывать dbo, попробуйте следующий код

select Routine_name as Name, specific_schema as user 
from INFORMATION_SCHEMA.ROUTINES
where specific_schema <> 'dbo'
UNION
select Table_name as Name, specific_schema as user 
from INFORMATION_SCHEMA.TABLES
where specific_schema <> 'dbo'
0 голосов
/ 23 ноября 2011

Чтобы получить все объекты, которые не принадлежат принципалу dbo, сделайте что-то вроде этого:

select name, object_id
from sys.objects
where principal_id not in
(
    select principal_id
    from sys.database_principals
    where name = 'dbo'
)
...