下面是两种可能的情况:
1. 如果这个对象的所有者没有被更改过,那么它对应的架构的所有者就是它的所有者。
2. 如果这个对象的所有者被更改了,我需要去查找更改后的所有者是谁。
幸运的是,在对象目录视图sys.objects中,principal_id字段隐含了这个信息。如果这个字段值是NULL,那么这个对象的所有者是它架构的所有者。如果不是NULL,那么这个principal_id就代表它的所有者。下面的语句可以根据数据库对象查询它所对应的所有者:
SELECT
o.name AS OBJECT_NAME,
CASE
WHEN o.principal_id IS NULL THEN dp2.name
ELSE dp.name END AS Object_Owner
FROM
sys.objects AS o
LEFT JOIN sys.schemas AS s
ON o.schema_id = s.schema_id
LEFT JOIN sys.database_principals AS dp
ON o.principal_id = dp.principal_id
INNER JOIN sys.database_principals AS dp2
ON s.principal_id = dp2.principal_id
WHERE o.object_id = OBJECT_ID(N'input_object_name_here')