The dbo is the mapped name to the database owner.
When a user creates an object the users username is appended to the begining of the object name. (This applies to non-sysadmin users, I'll cover that in a minute.) For example, if I'm a user on your system, and my username is mrdenny, and I create a table named test1 that tables full name will be "mrdenny.test1". If I want to query this table I can do it in two ways.
Code:
select *
from test1
go
select *
from mrdenny.test1
For any other user to access my table they will need to use the second command shown above. This can cause problems with developers who do not qualify the owner of the object. Even if I have db_owner rights to the database, unless I am the database owner if I don't specify the dbo. in the create script the object will be created with my personal account as the owner. To test this you can create a non-sysadmin account, give it db_owner access to a database and run the following two scripts.
Code:
create table test1
(C1 varchar(10))
go
create table dbo.test1
(C1 varchar(10))
go
When you look in Enterprise Manager you will see two tables named test1. One is dbo.test1 and the other is {YourUserName}.test1. If the user is the database owner then you will not have this problem. As the database owner your username within the database is dbo, so all objects you create will by default be created with dbo as the owner.
If you create an object as a user with the sysadmin fixed server role, you will by default be a dbo so all objects will by default be created with dbo as the owner.
As I said, the only time this should be a problem is when users are creating objects with out specifying the dbo as the owner.
I hope this answered your question. If not, let me know and I'll try to clear up anything I've confused you on.
Denny
MCSA (2003) / MCDBA (SQL 2000)
--Anything is possible. All it takes is a little research. (Me)
(Not quite so old any more.)