如何在sysobjects上进行选择时获得模式?
我正在修改一个名为SearchObjectsForText的存储过程,它只返回名称,但我也希望包含模式。
现在,它正在做类似的事情:
SELECT DISTINCT name
FROM sysobjects我想知道需要加入哪些表格才能为每个“名称”返回该计划。
发布于 2009-05-27 19:06:36
如果您指的是Server 2005或更高版本,请使用sys.objects而不是sysobjects:
SELECT sys.objects.name, sys.schemas.name AS schema_name
FROM sys.objects
INNER JOIN sys.schemas ON sys.objects.schema_id = sys.schemas.schema_id2005年引入了模式。到2000年为止,用户等同于架构。SQL Server 2000的相同查询:
SELECT sysusers.name AS OwnerName, sysobjects.name
FROM sysobjects
INNER JOIN sysusers ON sysobjects.uid = sysusers.uid发布于 2009-05-27 19:14:12
在Server 2005 (及以上)上,您可以使用sys.objects视图:
select
name as ObjectName,
schema_Name(schema_id) as SchemaName
from
sys.objects在Server 2000 (及以下)中,"schema“具有不同的概念含义。来自MSDN的说明:
在Server的早期版本中,数据库可能包含一个名为"schema“的实体,但该实体实际上是一个数据库用户。Server 2005是Server的第一个版本,其中架构既是容器又是命名空间。
发布于 2009-05-27 19:07:06
你能用模式视图代替吗?
SELECT DISTINCT table_name, table_schema
FROM INFORMATION_SCHEMA.TABLES根据MSDN页面 (用于Server 2008及以上版本),
不要使用INFORMATION_SCHEMA视图来确定对象的架构。查找对象架构的唯一可靠方法是查询sys.objects目录视图。
但是,它们似乎是指一个问题,您有一个表名,并且试图找到它的模式,如果有多个同名的表(在不同的模式中),它就不能工作。如果您正在查询多个结果(而不仅仅是试图为特定表找到模式),那么应该可以。
https://stackoverflow.com/questions/917431
复制相似问题