If you use "Detach/Attach" function you'll be able to transfert the database with all triggers and objects that are inside the DB. You must know that only the database will be tranfert. If you need to have all the logins for the old server, you can use this link from Microsoft. After you run the procedure, you can have some orphaned users. If you read carefully the Miscrosoft KB, you will find a link to solve this issue.
If you tranfer from 2005 to 2008 you must use this link to tranfer logins.
Hope this help you.
Since you didn't specify any other permissions you gave or denied to the user group AD\Users, I'll assume that they are memebers of db_datareader and public and have no other specific permissions.
To perform my test, I used SQL Server 2008, not R2 and started out with a completely new user group, database, schema and stored procedures.
As sysadmin
Created a Windows Group called AD\TEST_USERS in Windows
Created a login from that Windows Group in SQL Server
Created a test database TEST
Added AD\TEST_USERS as a member of public and db_datareader on the TEST database
Created a schema called XTR
Added two stored procedures sp_1 and sp_2 to XTR
As a member of AD\TEST_USERS
Opened up SSMS
Opened up the TEST database and expanded stored procedures. Nothing was visible
As sysadmin
GRANT EXECUTE ON OBJECT::XTR.sp_1 TO [AD\TEST_USERS]
GRANT EXECUTE ON OBJECT::XTR.sp_2 TO [AD\TEST_USERS]
As a member of AD\TEST_USERS
I refreshed the stored procedures and now see XTR.sp_1 and XTR.sp_2
As sysadmin
DENY EXECUTE ON OBJECT::XTR.sp_1 TO [AD\TEST_USERS]
As a member of AD\TEST_USERS
I refresh stored procedures in SSMS and no longer see XTR.sp_1 but I do see XTR.sp2
Doing the same steps as you on my SQL Server 2008, simply denying EXECUTE on one stored procedure did not make the other stored procedure invisible in the same schema to members of my test group.
Best Answer
"Metadata visibility" determines what objects a user can see. Basically, their own objects (login, users) or what they have permissions on (tables, code etc).
You can't hide an object that they have select/execute premission on. Simple.
What you can do if to use schemas to create object groupings in SSMS to "declutter" John and Sarah's view. However, this is a poor use of schema in my opinion