2011-11-23 115 views
1

是否有人知道如何从2005+ sys.objects(或其他)视图中获得SQL Server 2000 sysobjectsuid列的等效项?相当于sysobjects.uid的SQL Server 2008 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%' 

由于提前,

凯文

回答

2

UID指到对象所有者的用户ID ...

在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

这不是在新版本中会消失的表格吗?我希望能够使用未来将继续提供的观点之一。 – Kevin

+0

Sys.Sysobjects是2005年和2008年的兼容性视图。不知道他们是否会在Denali和未来的版本中支持它... Denali在ROUTINES视图上的文档似乎意味着SYS视图集合将在...周围...我修改了我的答案,以显示如何从ROUTINES视图获取相同信息 – Sparky

+0

谢谢您的回答,我将在星期一检查它并让您知道结果!今天我已经没有时间了。 – Kevin

0

要获得不被dbo主要拥有的所有对象,做这样的事情:

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

uid将被提到的表的所有者的ID,不幸的是,这将返回名称和编号每个对象,但我正在寻找的不是dbo(uid = 1)所拥有的每个对象的名称 – Kevin

+0

@Kevin检查我的编辑。我建立了一个查询,选择不属于'dbo'主体的所有对象的名称和标识。 – 2011-11-23 16:54:50