Your query works for me in 2005 (not upgraded databases). There is some text in BoL, possibly relevant:
Schema ID of the owner of the object.
For databases upgraded from an earlier version of SQL Server, the schema ID is equal to the user ID of the owner. http://www.dbforums.com/local/note.gifImportant: If you use any of the following SQL Server 2005 DDL statements, you must use the sys.objects catalog view instead of sys.sysobjects. CREATE | ALTER | DROP USER CREATE | ALTER | DROP ROLE CREATE | ALTER | DROP APPLICATION ROLE CREATE SCHEMA ALTER AUTHORIZATION ON OBJECT
Overflows or returns NULL if the number of users and roles exceeds 32,767.
For more information, see Querying the SQL Server System Catalog.
If you are trying to determine the schema within the sproc, try this:
from sys.procedures Procedures
inner join sys.schemas Schemas on Procedures.schema_id = Schemas.schema_id
where object_id = @@PROCID
If you are trying to determine the owner outside the sproc, you are going to run into a Catch 22. You'd have to know the schema of the procedure before you could look up what schema it is in. Procedure name is not sufficient, as there could be two sprocs with the same name, but in different schemas.
If it's not practically useful, then it's practically useless.